实现功能
输入商品名称,并爬取第一页的商品的前100条评论
分析数据来源
爬取搜索页面
随便搜索一个商品,打开networks控制台,从图片里面可以看出访问的URL是直接返回了商品数据:
因此直接解析该url返回的页面就可以获得搜索得到的商品的信息。当然如果使用requests
库访问需要带上cookie
以及user-agent
这两个头,否则只会返回一个重定向链接,而不是正确的页面。
其中每个商品的html结果大概如下:
其中比较重要的是商品的名称,价格以及对应的商品详情的URL。点击这个URL可以跳转到商品的详情页面。此外,URL还包含了商品的id。该id在获取其评论时会用到。例如图中URL为:
https://item.jd.com/1709853.html
,则其id为1709853。
获取评论
京东的默认是不展示评论的,因此需要先点击评论。查看一下直接访问的URL是没有返回评论数据的,猜测是通过ajax请求拿到的数据。因此在 filter 搜索 comment,随后可以定位到:
基本可以确认这个URL是获取评论数据的。这个URL默认是:
https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4107&productId=1709853&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1
网上搜一下,发现
callback=fetchJSON_comment98vv4107
可以去掉。其他参数如page(页数)
,pageSize(每一页条数)
可以根据自己需要定。其他参数意义不是很明确,多尝试一下应该就知道其具体意思。这里比较重要的是productId=1709853
,上面提到该id可以直接从商品详情URL中获得,因此只需要先解析搜索页面,再获所有商品的id。随后按商品获取其评论即可。用伪代码来表示:
html = 爬取(搜索页面,关键字)
for 商品id in 解析搜索页面(html):
爬取(商品评论, 商品id)