*Photo by Lauren Mancke on Unsplash
与之前 RAM-JD 项目类似,最近也想换笔记本了,所以来京东做个调研,康康笔记本的情况(虽然已经有了想买的那一款),但是多比较看看总不会有错。
也是第一次使用 Scrapy 来爬取数据,之前或者说一直都是使用 requests,也可能是一段 Scrapy 从入门到入土的历程吧(笑
- 新建 Scrapy 项目,并新建一个爬虫(按教程来的
>> scrapy startproject jd_laptop
>> cd jd_laptop
>> scrapy genspider laptop jd.com
- 编写爬虫代码
京东页面也在不断变化以应对各种各样的爬虫(滑稽),现在请求页面只能拿到商品名称和链接/id,对应的价格、店铺和评价等等都是异步加载的。
找到对应异步链接之后就可以开始爬取数据了,一共三个分别是评论数、店铺名称和价格。分别针对这三类请求写三个回调函数就行了。
然后有个问题是在 Scrapy 中请求是异步的,所以导致在保存数据有点麻烦。一个简单的想法是使用信号,当爬虫结束的时统一保存所有数据,虽然有点蠢,却是没有办法情况下的办法了。
- 爬取结果
数据在 data/data.7z,一共拿到 58824 条数据(除去表头)。
默认保存为 csv,若是想保存为 json,需要将 spiders/laptop.py 中的 SAVE_DATA_TYPE 变量改为 0。
>> git clone https://github.com/LewisTian/jd-laptop.git
>> cd jd-laptop
>> pip install -r requirements.txt
>> cd jd_laptop
>> scrapy crawl laptop
若要导入 MySQL,先创建表 laptop,建表语句可以参考 data/db.sql
然后就是导入数据:
load data infile 'F:/GitHub/jd-laptop/jd_laptop/data/data_981.csv' into table laptop fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n'
商品可以通过 https://item.jd.com/{product_id}.html 访问。
笔记本名称 | 店铺 |
---|---|
美帝良心想🐮🍺
不明觉厉,差评 100% 还行
🐮🍺不愧是美帝良心想
有些下架了就显示价格为 -1,因此将价格转化为无符号数了。
由于京东爬不到销售量,所以暂且拿评论数当作销售量的反映吧。
本来是前十的,结果发现都是荣耀 MagicBook,于是扩大到 50,结果后面又都是小米😂
Copyright (c) 2019 Lewis Tian. Licensed under the MIT license.