用scrapy爬取京东的数据

 

一、项目介绍

 

主要目标

1、使用scrapy爬取京东上所有的手机数据

2、将爬取的数据存储到MongoDB

 

环境

win7python2pycharm

 

技术

1、数据采集:scrapy

2、数据存储:MongoDB

 

难点分析

和其他的电商网站相比,京东的搜索类爬取主要有以下几个难点:

1、搜索一个商品时,一开始显示的商品数量为30个,当下拉这一页 时,又会出现30个商品,这就是60个商品了,前30个可以直接 从原网页上拿到,后30个却在另一个隐藏链接中,要访问这两个 链接,才能拿到一页的所有数据。

2、隐藏链接的构造,发现最后的那个show_items字段其实是前30 个商品的id

3、直接反问隐藏链接被拒绝访问,京东的服务器会检查链接的来源, 只有来自当前页的链接他才会允许访问。

4、30个商品的那一页的链接page字段的自增是135。。。这 样的,而后30个的自增是246。。。这样的。

 

下面看具体的分析。

 

 

二、网页分析

首先打开京东的首页搜索“手机”:

 

用scrapy爬取京东的数据

 

一开始他的地址是这样的:

用scrapy爬取京东的数据

转到第2页,会看到,他的地址变成这样子了:

用scrapy爬取京东的数据

 

后面的字段全变了,那么第2页的url明显更容易看出信息,主要修改的字段其实就是keyword,page,其实还有一个wq字段,这个得值和keyword是一样的。

那么我们就可以使用第二页的url来抓取数据,可以看出第2页的url中page字段为3。

 

但是查看原网页的时候却只有30条数据,还有30条数据隐藏在一个网页中:

 

用scrapy爬取京东的数据

 

从这里面可以看到他的Request url。

再看一下他的response:

 

用scrapy爬取京东的数据

里面正好就是我们需要的信息。

看一下他的参数请求:

用scrapy爬取京东的数据

 

这些参数不难以构造,一些未知的参数可以删掉,而那个show_items参数,其实就是前30个商品的id:

用scrapy爬取京东的数据

 

准确来说是data-pid

此时如果我们直接在浏览器上访问这个Request url,他会跳转到https://www.jd.com/?se=deny页面,并没有我们需要的信息,其实这个主要是请求头中的referer参数

 

用scrapy爬取京东的数据

这个参数就是在地址栏上的那个url,当然在爬取的时候我们还可以加个user-agent,那么分析完毕,我们开始敲代码。

 

 

三、爬取

创建一个scrapy爬虫项目:

scrapy startproject jdphone

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywjwy.html