需求:根据某个关键词,这里以"spark"为例,在京东搜索页面进行输入,然后爬取搜索的商品结果,对某一个商品进入详情页面,爬取商品的评论信息!
以关键字"spark"进行搜索,拿到搜索页的url地址:
https://search.jd.com/Search?keyword=spark&enc=utf-8&suggest=1.rem.0.T00&wq=spark&pvid=5b4c9c5880184033b4174b73d0826d32
通过精简后,发现下面的地址也可以拿到,请求url地址为:
https://search.jd.com/Search?keyword=spark
查看下一页的链接,发现是一个js实现的,无法直接获取到,如下图:
点击链接,通过url查看地址变成了:
第二页的时候,page变成了3,第三页的时候,page变成了5,由此推导出page = 1 + (实际页数-1)* 2
直接访问地址https://search.jd.com/Search?keyword=spark&page=3一样拿到了结果信息,所以可实现自己拼接url来爬取数据啦!通过定位商品,点击检查,查看页面信息如下:
好了,编写爬虫的方法,这里还是通过xpath进行定位咯,xpath方便简单,没用过的直接百度啦!
商品爬取结束,通过pipeline保存到mysql数据库,这个已经在上一节讲过啦。地址(http://www.jianshu.com/p/f4d6e235a924),直接看数据库的结果:
好了,爬取商品完毕,下面看看某一个商品的全部评论如何获取呢?点击到商品详情页面,以地址https://item.jd.com/11782888.html#comment为例,依然打开浏览器,找到评论的地方,选择检查,就可以定位到源码啦,如下图:
如图所示,评论信息是一个个comments-item,那么还是直接通过xpath来定位吧,重点是下一页,这时候当我们点击下一页的时候,发现url并没有什么明显的变化了,那么在页面按f12,看后台悄悄做了什么,看到通过js发送了后台请求:
复制出来对应的url,直接在浏览器请求,一样得到了结果,所以直接请求对应的地址就好啦,去掉地址中无用的参数:
https://sclub.jd.com/comment/productPageComments.action?productId=11782888&score=0&sortType=3&page=1&pageSize=10
并且通过请求发现,返回的是一个json对象,所以直接解析json,并对url进行下一页的拼接,就可以拿到所有评论啦!