首先找到自己心仪的棉袄,然后开发者工具手机数据。最主要是找到数据接口的参数变化。通过开发者工具发现,
上代码:
1 """ 2 今天来薅羊毛衣 3 """ 4 import pprint 5 import requests 6 import csv 7 import time 8 import random 9 10 # 保存文档 11 f = open('严选大衣.csv', mode='a', encoding='utf-8-sig', newline='') 12 csvWriter = csv.DictWriter(f, fieldnames=[ 13 '评论者名字', 14 '用户等级', 15 '颜色', 16 '尺码', 17 '评论时间', 18 '评论星级', 19 '评论内容', 20 '追加评论内容', 21 ]) 22 # 写入头 23 csvWriter.writeheader() 24 # 请求头 25 headers = { 26 "Cookie": "_ntes_nuid=9f830e2ea8dfc5a29dd3446a4397a1e7; _ntes_nnid=9f830e2ea8dfc5a29dd3446a4397a1e7,1631062455089; _ga=GA1.2.127504464.1634543456; P_INFO=svipdragon@126.com|1634543492|1|codecombat|00&99|null&null&null#fuj&350500#10#0#0|&0||svipdragon@126.com; UM_distinctid=17d1e37c7c55fa-0a8032047ecf8f-57b1a33-154ac4-17d1e37c7c651e; yx_from=web_search_baidu; yx_delete_cookie_flag=true; yx_aui=9b7cf85f-64aa-4829-85c2-08960cd67005; mail_psc_fingerprint=53b2ec3f46e915e614bacec3c6550665; yx_stat_seesionId=9b7cf85f-64aa-4829-85c2-08960cd670051637044031558; yx_stat_ypmList=; yx_s_device=98e7db7-7a74-4220-b536-0e935413d7; yx_but_id=d71e222e1f1a4ca2a629cd4b38f96c40d213fe6d13904140_v1_nl; user-close-downloadGuide=true; yx_show_painted_egg_shell=false; yx_search_history=%5B%22iphone%2013%20max%20pro%22%5D; yx_new_user_modal_show=1; yx_page_key_list=http%3A//you.163.com/item/list%3FcategoryId%3D1005002%26_stat_area%3Dnav_4%2Chttp%3A//you.163.com/item/list%3FcategoryId%3D1010000%26subCategoryId%3D1037007%2Chttp%3A//you.163.com/item/detail%3Fid%3D3533004%26_stat_area%3Dmod_22_item_2%26_stat_id%3D1010000%26_stat_referer%3DitemList; yx_stat_seqList=v_3a06151462%7Cv_7fcd157695%3B-1%3Bv_768d0e424c%3B-1%3Bv_ad03e1dbc7%3Bc_585adc12c7%3Bv_012cf63b71%3B-1%3Bv_3a06151462%3B-1", 27 "Referer": "http://you.163.com/item/detail?id=3533004&_stat_area=mod_22_item_2&_stat_id=1010000&_stat_referer=itemList", 28 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", 29 } 30 31 # 要请求的url,通过开发者工具比较url,发现只有page后的参数有变化 32 for page in range(1, 35): 33 print(f'====正在爬取{page}页数据!====') 34 url = f'http://you.163.com/xhr/comment/listByItemByTag.json?__timestamp=1637044227054&itemId=3533004&tag=全部&size=20&page={page}&orderBy=0&oldItemTag=全部&oldItemOrderBy=0&tagChanged=0' 35 response = requests.get(url=url, headers=headers) 36 pprint.pprint(response.json()) # 打印发现,数据在data->commentList里, 37 38 results = response.json()['data']['commentList'] # 列表 39 for item in results: #开始逐项提取需要的数据 40 name = item['frontUserName'] # 名字,加密了的 41 userLevel = item['memberLevel'] # 用户等级 42 skuInfo = item['skuInfo'] # 商品信息 列表 43 # 从商品信息中提取颜色和尺码 44 color = skuInfo[0] # 颜色 45 size = skuInfo[1] # 尺码 46 cttime = item['createTime'] # 评论创建时间,是13位的时间戳,毫秒级 47 # 处理下content内容,因为它有追加评论,如果评论内容是默认好评,就尝试提取用户追加的评论 48 # 如果评论内容不是默认好评,就把评论内容和回家评论内容拼接成一个字符串 49 # 如果评论是默认好评,又没有追加评论,那么content就是默认好评 50 content = item['content'] # 评论内容 51 try: 52 zjcontent = item['appendCommentVO']['content'] # 53 except: 54 zjcontent = '没有!' 55 56 # 现在评论和追加评论都在手,现在要处理的是: 57 """ 58 1,如果是默认好评,要看有没有追加评论,有追加评论的话,评论=追加评论 59 2,如果是默认好评,又没有追加评论的话,评论=评论 60 3,如果不是默认好评,又有追加评论的话,评论=评论+追加评论 61 """ 62 63 star = item['star'] # 评论星级 64 dit = { 65 '评论者名字':name, 66 '用户等级':userLevel, 67 '颜色':color, 68 '尺码':size, 69 '评论时间':time.strftime("%Y-%m-%d %H:%M:%S", time.localtime((cttime/1000))), 70 '评论星级':star, 71 '评论内容':content, 72 '追加评论内容':zjcontent, 73 } 74 print(dit) 75 csvWriter.writerow(dit) 76 print('数据采集完毕!')
未完成的代码:就是在源代码的基础上将评论内容和追加评论内容拼接成一个字符串,思路是,如果评论内容是默认评论且有追加评论,评论内容是追加评论内容;如果评论内容不是默认评论内容且有追加评论,评论内容=评论内容+追加评论内容;如果评论内容是默认评论且没有追加评论,那么评论内容是默认评论内容。
代码运行部分截图: