现在注册

登录

忘记密码

忘记密码? 请输入您的电子邮件地址。 您将收到一个链接,并将通过电子邮件创建一个新的密码。

如何用爬虫抓取京东商品评价?

最近在学习用python写爬虫,发现抓取动态网页比抓取静态网页难了不是一点。在抓取京东商品评价时遇到了无法解决的问题,在网上搜索无果后来知乎向各位大大求助。因为需要大量抓取,我觉得用模拟浏览器渲染js来实现速度似乎不可接受。这里打算分析京东商品评价的最后加载的url,用python模拟这一请求来获得地址。用过ie发现其url是这个 但一直分析不出callback=jsonp1427099305331&_=1427099313525 的两串数字是如何生成我,要如…

评论 ( 20 )

  1. 爬虫有很多种,懂代码的技术流尽情参考大神@ 路人甲提供的python抓取思路和示例代码,一顿猛如虎的操作后获取到想要的京东商品评论数据。

    如果懂一点代码,又不想用python那么麻烦,八爪鱼的json采集功能值得拥有。找到json网址→复制到八爪鱼中启用json采集功能→刷刷刷出来数据。

    八爪鱼json采集教程请看:

    json采集功能点 – 八爪鱼采集器

    而八爪鱼的另一种采集方式——简易模板,可以说是不懂代码的数据工作者的福音。对于爬取京东商品评论这个需求,10次鼠标点击和2次文本输入,即可快速获取数据。划重点,10次鼠标点击和2次文本输入,操作简单得不能更简单系列。

    以下是使用八爪鱼的简易模板,抓取京东商品评价的具体操作示例。

    1、 第一步,下载八爪鱼软件并安装,打开并登录软件后,点击简易采集。

    2、选择“京东”采集模版。

    3、选择“京东商品评论” 模版,然后点击立即使用。

    4、按下图描写的步骤,输入要采集的商品网址以及翻页次数,然后点击“保存并启动”。

    5、根据自己的需求选择相应的采集方式,这里以“启动本地采集”举例。

    6、喝杯咖啡,静静等待数据,见证奇迹的时刻到了。

    7、选择导出数据,然后选择适合的导出方式,这里以excel2007举例说明,最后导出可以看到采集到的满满数据,全都是爱啊

    最后附上八爪鱼的下载链接:

    免费下载 – 八爪鱼采集器

  2. 你用前嗅的数据采集软件啊,我之前是用它采集淘宝的商品信息和京东的评价,全都采集下来了,而且速度很快,我也是不太会操作,直接跟他们买的配置,拿来后在自己电脑上直接就采集了,一点不费事。像是一些网站反爬虫机制很严格,他们也有办法破解,还是很强大的。

    现在又免费版的,就是采集不了太多的数据,不过可以试试效果。

  3. 最好的办法是使用了selenium模拟浏览器爬取数据,不需要关注js怎么加载,数据怎么请求,拿到最后渲染的dom数据解析就可以了

  4. 如何抓取价格啊?

  5. from bs4 import BeautifulSoup
    import requests
    
    with requests.session() as s:
        url = 'https://club.jd.com/comment/productPageComments.action'
        data = {	
            'productId':'3888284',
            'score':0,
            'sortType':5,
            'pageSize':10,
            'isShadowSku':0,
            'page':0
        }
        r = s.get(url, params = data)
        r.json()

    out:

    {'comments': [{'afterDays': 0,
       'anonymousFlag': 1,
       'commentTags': [{'commentId': 2099724291,
         'created': '2016-12-07 11:56:25',
         'id': 3965820,
         'modified': '2016-12-07 11:56:25',
         'name': '支持国产',
         'pin': '',
         'productId': 3888284,
         'rid': 31389,
         'status': 0},
        {'commentId': 2099724291,
         'created': '2016-12-07 11:56:25',
         'id': 3965821,
         'modified': '2016-12-07 11:56:25',
         'name': '信号稳定',
         'pin': '',
         'productId': 3888284,
         'rid': 15236,
         'status': 0}],
    
    

    基于 @路人甲的代码改进一下, 主要就是回答中提到的callback参数其实可以不使用的, 这样数据返回的就是json格式, 方便存取

  6. 看了一下京东的商品评论接口已经变化了,变成了下面这个样子。


    只需要模拟几个参数就可以了。
    productId:商品的ID,如果没有商品ID可以在商品静态页面抓取到。
    sortType:评论按照什么排序:推荐排序和时间排序,默认5
    page:当前是第几页评论,从0开始递增
    pageSize:指定每一页展示多少评论,默认10
    callback:默认不需要修改:fetchJSON_comment98vv61

    有了这几个参数说明,现在假设我们已经知道商品ID:3820002,只需要每次访问评论的接口,然后把page不断地加一即可,运行效果如下所示。


    以上只是简单测试,改进意见:

    • 加入多线程、多进程、异步等等
    • 大规模快速抓取需要代理等
    • 异常捕获处理需要修改完善

    代码示意:

    #endocing:utf-8
    from bs4 import BeautifulSoup
    import re,requests,json
    
    s = requests.session()
    url = 'https://club.jd.com/comment/productPageComments.action'
    data = {	
    	'callback':'fetchJSON_comment98vv61',
    	'productId':'3888284',
    	'score':0,
    	'sortType':5,
    	'pageSize':10,
    	'isShadowSku':0,
    	'page':0
    }
    
    while True:
    	t = s.get(url,params = data).text
    	try:
    		t = re.search(r'(?< =fetchJSON_comment98vv61().*(?=);)',t).group(0)
    	except Exception as e:
    		break
    	
    	j = json.loads(t)
    	commentSummary = j['comments']
    	for comment in commentSummary:
    		c_content = comment['content']
    		c_time = comment['referenceTime']
    		c_name = comment['nickname']
    		c_client = comment['userClientShow']
    		print('{}  {}  {}n{}n'.format(c_name,c_time,c_client,c_content))
    	data['page'] += 1
    
  7. 怎么把初次评论和追加评论分别爬取出来呢?

  8. 自己动手做了一个爬取京东商品评论的
    下载地址yunya.pw/?

    ====================================

    爬虫的Python源码,陆续整理… 云涯 – Personal Web
    天猫旗舰店 – 2016.11.25
    京东旗舰店 – 2016.11.27

    ====================================

  9. 前一段时间,也是在爬取jd的商品评论,也会出现 题主 所说的问题。

    先说一下我的解决策略:

    首先伪装是必须的嘛,这一点不用多说,不过这次没有使用IP代理。不想麻烦,不过使用代理的话能使效果好点,这是肯定的。

    然后,采取多线程抓取,同时采取 遇到空白 就sleep15s,但是这样仍然会出现空白。 怎么办?不能在一棵树上吊死啊,那就换一个爬喽。毕竟需要爬的商品有很多。

    等等,但是这样也太粗暴了,是吧? 所以,就算你要屏蔽我我也要对你不依不舍。对于每次爬取我都会记录一下,对于这个商品的评论我爬了多少?总共要爬多少?这样下次我就接着爬(●ˇ∀ˇ●)

    好吧,承认,还是有点简单粗暴,,ԾㅂԾ,,

    好像有点偏题了(lll¬ω¬)。其实那两个字串也不怎么重要的,去掉一样可以,就是 空白页会多一点。。。

    写到这里我回去看了一眼问题,原来是去年的问题(ˉ▽ˉ;)…
    善意的提醒一下,jd的评论提取api接口有变,变成了下面这个样子
    callback=fetchJSON_comment98vv35654
    当然本人现在也没能准确的知道后面的一串数字是嘛意思,不过可以确定的是应该时间戳,因为测试过连续几天用这一个字串都没问题的,但是你用浏览器去查看的时候,能够发现它是在变化的,间隔大概是1小时左右吧,记不太清楚了。朋友猜想的可能是 代表着服务器的编号 本人也不是很清楚哈,大家可以猜猜看,反正猜对也没奖O(∩_∩)O

    感谢阅读~

  10. 京东商品信息和评价采集爬虫

  11. 推荐看看这篇知乎专栏的文章,专门讲的是怎么写爬虫爬取京东商品评论的:手把手教你写电商爬虫-第五课 京东商品评论爬虫 一起来对付反爬虫 – 数据工厂 – 知乎专栏

  12. 自己用fidler抓包,然后解析出json链接,然后用正则去拿评论。

  13. 最后提到的那个url可以用的,会返回空白的原因是京东服务器对你不断请求,做暂停了。
    之前我也做过京东评论爬虫,不加IP代理和useragent差不多15秒就给你空白返回,然后隔3-5s,开始返回正确的内容。
    建议用那个网址加代理和useragent,后面你还会发现更多问题。

  14. 动态加载的东西包括评论,价格(当前价格初上市价格),评论数(打1分至5分的具体个数及和),评论。
    直接获取不到对吧。
    找对应的标签的id,再顺着js找到对这个id对应的url,就是你找到的那个东西,那两串数字每次访问都是不一样的,也许是时间戳或者时间戳的变体之类的吧我没细看。
    不知道怎么生成两串数字对吧,好,你把这个url的两串数字删了试试,发现没,一样的可以访问和请求。
    多次访问出空白,看下给你返回的是302。我测的精确数据是,有的偶然的,sleep个一秒两秒的重新访问就行。有的sleep 27 秒或者 40秒 就恢复正常了。

  15. callback=jsonp1427099305331&_=1427099313525 无意义 这部分是用jsonp ajax获取数据源时自动生成的回调函数名称和随机数 对抓取无影响

  16. 这些都是header里的,慢慢截吧,相当于一个安全验证

  17. 后面生成的串主要适用于跨域传输数据,不影响提取数据吧,可以直接通过club.jd.com/productpage就能提取json

  18. 解决了,有个url可以专门进入评价页面

  19. 多研究规律,少研究技术

  20. 可以为任意值,比如这里是时间戳

发表回复