采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
京东网爬取不到 评论数量
我已经确定找到了 评论数量的那个 a标签对象, 也能读取 那个a标签的属性,比如 评论地址,,但就是不能读取 a标签对象的 文本,是不是跟 编码 有关系?? 但其它a标签文本都能读取啊,想不明白。
之所以获取不到评论,是因为京东的反爬机制,第一次加载的HTML中是没有评论数据的,如下图:
评论数据是通过jsonp的方式异步加载过来的,如下图:
谢谢老师,我按老师的思路已经解决了问题。并且把异同步任务加载概念学习了一遍。
#comment_data li_ids=[] for li in ul: li_id = li.xpath('@data-sku')[0] li_ids.append(li_id) id_code=','.join(li_ids) url = 'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={0}'.format(id_code) js_data = requests.get(url).json() comments = js_data['CommentsCount'] # reuse variables li_ids = [] for comment in comments: comment_count = comment['CommentCount'] # goodcomment_count = comment['GoodCount'] li_ids.append(comment_count) 先把所有评论数跑一遍储存起来,然后再在后面添加,加快爬虫速度,但写得还是太丑了。。。
def spider_jd(sn,book_list): url='https://search.jd.com/Search?keyword={0}'.format(sn) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' } respond=requests.get(url, headers=headers) respond.encoding= 'utf-8' html_doc =respond.text selector=html.fromstring(html_doc) ul=selector.xpath('//div[@id="J_goodsList"]/ul/li') count=0 for li in ul: count+=1 if count == 1: print('-' * 100) print('-' * 100) else: print('-' * 100) # commerce shop = li.xpath('div/div[@class="p-icons"]/i[@data-tips="京东自营,品质保障"]/text()') commerce=li.xpath('div/div[@class="p-shopnum"]/a/text()')[0] print('商家:{0}'.format(commerce)) if not shop else print('商家:京东自营店') #name name = li.xpath('div/div/a/@title')[0] # title= li.xpath('string(//div/div/a)') print('书名:{0}'.format(name)) #price price=li.xpath('div/div[@class="p-price"]/strong/i/text()')[0] print('价格:{0}元'.format(price)) #comment comment = li.xpath('string(//div/div[@class="p-commit"]/strong/a)') commentlink = li.xpath('div/div[@class="p-commit"]/strong/a/@href')[0] print('评论数量{0}'.format(comment)) # comment = li.xpath('div/div[@class="p-commit"]/strong/a) # 对象是存在的,也能读取其中的属性,就是读取不了其文本 print('评论链接:{0}'.format(commentlink.replace('//', ''))) # print('{0}条评论'.format(comment)) #link link = li.xpath('div/div[@class="p-name"]/a/@href')[0] print('商品链接:{0}'.format(link.replace('//', ''))) #separate print('-'*100) book_list.append({ '商家': '当当自营店' if not shop else commerce, '书名': name, '价格': float(price), '评论': commentlink, '链接': link })
把你的代码,贴出来,我帮你调试下:
在这里贴
老师我已经贴出来了,而且我在爬一号店的时候发现,一号店的评论数量是a标签的内容,但a标签里面嵌套了i标签,这样使用text()的时候会生成2个元素的列表,而这个是a标签里面 直接 加了个文本“万条评论”,然后就无法读取了。
登录后可查看更多问答,登录/注册
学会项目开发思路,掌握Python高阶用法。
1.3k 28
1.3k 16
1.1k 16
1.2k 12
1.1k 11
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号