这是崔斯特的第二十篇原创文章
本节代码 : zhangslob/Taobao_duoshou 万水千山总是情,给个star行不行
铛铛铛,懒惰了一段时间,咱接着学Scrapy。这一期玩点新花样,使用Flask展示我们的数据。效果如下图:
有些重复的 ╮(╯Д╰)╭
过程简单来说有两步:
- 使用Scrapy采集淘宝数据
- 使用Flask展示数据
采集数据
抓包分析
其实采集淘宝数据的方法真的很多很多,这里不讨论Selenium,只说如何抓包分析,先提供几个接口,供观众老爷观赏:
- https://s.taobao.com/list?seller_type=taobao&json=on
- https://s.m.taobao.com/search?event_submit_do_new_search_auction=1&_input_charset=utf-8&topSearch=1&atype=b&searchfrom=1&action=home%3Aredirect_app_action&from=1&q=%E6%B0%B4%E6%9E%9C&sst=1&n=44&buying=buyitnow&m=api4h5&abtest=25&wlsort=25&page=1
- http://h5.m.taobao.com/app/selectassistant/www/choiceness/index.html?m=select&vm=nw&ttid=null&utd_id=null&page=2&n=44&q=%E6%B0%B4%E6%9E%9C
这三种接口都可以采集数据,别问我怎么知道的,经历过千百次失败。
这里选择的是第二种,大家可以试试这几种的区别。
使用第二种去采集数据时,返回的是json数据,数据量已经很多。
其中有几点坑,分享下。
- URL不同。淘宝和天猫的链接是不同的,移动端和网页端是不同的。
- 这里显示的
commentCount
(评论数量)并不是真实的,你可以打开详情页对比 - 评论数量的接口。淘宝和天猫的都可以使用
https://rate.taobao.com/detailCount.do?itemId=商品ID
,每件商品都有自己的唯一ID
代码实战
这里直接把主代码贴出来,使用 Mongo
保存数据。
taobao.py
|
|
说明几点:
- 在使用
meta
传递数据的时候,要使用copy.deepcopy
深复制,详情查阅 【scrapy】item传递出错 - 关于搜索词。因为淘宝对搜索结果只会返回100页,所以我们这里增加索引词,来获得更多数据。可以在代码末尾发现更多关键词,有1000多个,这个list是从这里获得 淘宝首页行业市场
反爬处理
呃呃,有意思的是,自己跑了一会获得了几万条数据,并没有任何的异常,没有在 middlewares.py
加代理,连 UA
都是固定的,好奇怪。
可能长得帅的人品都比较好吧。
展示数据
mongo 中的数据
数据并不直观,所以我们选择展示出来,做一个小小的聚合搜索
同样看看主文件 server.py
|
|
这里是借鉴了别人的项目,地址在这 1dot75cm/taobaobao
您可以自定义在 \templates
目录下修改对应的html文件
|
|
直接运行 server.py
|
|
打开 http://127.0.0.1:5000/ 即可查看结果
To Do
- 数据去重
- 价格及销量可视化展示
- 速度太慢,应使用分布式
- 评论采集
- 加强爬虫的反爬措施
Github : zhangslob/Taobao_duoshou 万水千山总是情,给个star行不行