Python编程学习圈 2020-12-08


「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python


1.项目需求:采用crawl模板自动爬取京东网商品信息。

2.项目分析

(1)打开京东主页(http://www.jd.com/)源码,查看某商品链接是否存在于主页源码中。若存在,下一步利用xpath表达式提取;若不存在,下一步需要进行抓包分析。

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_02

京东主页

(2)通过查看发现,主页商品链接存在于主页源码中,所以不需要进行抓包分析,直接提取。

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_03

主页部分源码

(3)点进某一类商品(http://shouji.jd.com/),对第二层页面源码进行分析,查看商品类别链接是否存在于页面源码中。

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_04

手机商品页面

(4)通过查看发现,某类商品类别链接存在于页面源码中。

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_05

手机商品页面源码

(5)点进某类商品的某一种,查看某个商品的链接是否存在于这层页面的源码中。


华为手机页面

(6)通过查看发现这一层页面源码包括该商品的链接。


华为手机页面部分源码

(7)下一层进入该商品页面https://item.jd.com/100005185603.html


华为Mate30手机页面

(8)分析所要爬取的信息是否在商品页面源码中,不存在则需要抓包分析。

3.项目实施步骤

(1)创建爬虫项目和文件。

scrapy startproject jingdong

scrapy genspider -t crawl jd jd.com

(2)获取商品链接:https://item.jd.com/100005185603.html

(3)通过商品链接、抓包结果分析所要提取商品的ID、标题、店铺名、店铺链接、价格的提取规则。

①商品ID:

thisurl = response.url

pat ='item.jd.com/(.*?).html'

thisid = re.compile(pat).findall(thisurl)

②商品标题:

title = response.xpath('/html/head/title/text()').extract()

③商品的店铺名:

shop = response.xpath('//div[@class="name"]/a/@title').extract()

④商品店铺链接:

shoplink = response.xpath('//div[@class="name"]/a/@href').extract()

⑤商品价格(抓包分析):

priceurl ='https://p.3.cn/prices/mgets?callback=jQuery&skuIds=J_'+str(thisid)

pricedata = urllib.request.urlopen(priceurl).read().decode('utf-8', 'ignore')

pricepat ='"p":"(.*?)"'

price = re.compile(pricepat).findall(pricedata)

(4)创建jingdong数据库和product数据表。

(5)编写jd.py文件。

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_06

jingdong/spiders/jd.py头文件

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_07

jingdong/spiders/jd.py

(6)运行爬虫。

scrapy crawl jd --nolog

(7)查看结果。

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_08

cmd中结果查看

「爬虫」抓包自动爬取京东网商品信息(采用crawl模板)_Python_09

数据库中结果查看