Python编程学习圈 2020-12-08
1.项目需求:采用crawl模板自动爬取京东网商品信息。
2.项目分析:
(1)打开京东主页(http://www.jd.com/)源码,查看某商品链接是否存在于主页源码中。若存在,下一步利用xpath表达式提取;若不存在,下一步需要进行抓包分析。
京东主页
(2)通过查看发现,主页商品链接存在于主页源码中,所以不需要进行抓包分析,直接提取。
主页部分源码
(3)点进某一类商品(http://shouji.jd.com/),对第二层页面源码进行分析,查看商品类别链接是否存在于页面源码中。
手机商品页面
(4)通过查看发现,某类商品类别链接存在于页面源码中。
手机商品页面源码
(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文件。
jingdong/spiders/jd.py头文件
jingdong/spiders/jd.py
(6)运行爬虫。
scrapy crawl jd --nolog
(7)查看结果。
cmd中结果查看
数据库中结果查看