京东商城的爬虫学习,遇到了一些难点,下面将我遇到的全部爬虫问题和爬虫架构问题,写在博客里供大家参考,问题比较多,会持续更新,本篇文章主要将把所有问题罗列出来,其问题的解决方案将放到新的博客里。
本京东项目使用scrapy框架完成的,所有的功能都是在框架之上使用中间件、扩展等功能实现的,丰富了scrapy框架的使用,对scrapy也有了更深的了解。
本篇文章的扩展博客会一个一个写,不光是分享给大家问题的解决方案,更重要的是遇到这一类问题的思路和突破口,我将每个问题的多种破解的方案、流程详细都会图文并茂的写出来,希望大家持续关注。
一、列表页懒加载后30个商品(已解决)
解决方案:
- 一、selenium下拉加载 ,配合使用中间件
详情链接:https://blog.csdn.net/qq_42739440/article/details/102466551
二、列表页只加载100页数据(已解决)
解决方案:
-
一、添加筛选时的字段 比如价格、型号
# 正则提取商品页的所有相关商品 //div[contains(@class,'J_selectorLine')]/@class J_selectorLine s-brand J_selectorLine s-category J_selectorLine s-category J_selectorLine s-line J_selectorLine s-line s-senior
-
二、增加筛选条件
-
三、商品页的其他商品深挖抓取
详情连接:https://blog.csdn.net/qq_42739440/article/details/102561905
三、详情页的价格js渲染(已解决)
解决方案:
- 一、selenium获取
- 二、js请求返回数据
GET请求:
https://p.3.cn/prices/mgets?skuIds=J_商品ID
# 价格请求的返回值: [{"cbf":"0","id":"J_100005853638","m":"4999.00","op":"4499.00","p":"4499.00"}]
- 三、商品列表页xpath获取
详情连接:https://blog.csdn.net/qq_42739440/article/details/102563616
四、商品唯一性问题(已解决)
解决方案:
- 一、商品编号
- 二、商品链接
五、ip问题(已解决)
解决方案:
- 一、代理池
- 二、减速
六、增量和数据实时更新(已解决)
解决方案:
- 一、全部链接每日更新、
- 数据库保存每个商品的链接,需要每日查询一下价格接口,看是否价格变动
https://p.3.cn/prices/mgets?skuIds=J_商品ID GET请求
七、获取商品型号、系列(已解决)
解决方案:
-
一、获取列表页的筛选条件
//div[contains(@class,'J_selectorLine')]/@class J_selectorLine s-brand # 商品品牌列 J_selectorLine s-category # 商品型号等分类列 J_selectorLine s-category # 商品分类列 J_selectorLine s-line # 商品筛选条件列 J_selectorLine s-line s-senior # 细分条件列
详细信息:https://blog.csdn.net/qq_42739440/article/details/102561905
八、获取不到下一页链接(已解决)
解决方案:
- 一、获取页码规律,请求100页
例如一共有100页,页数就是
1、2、3、4、5、6、7、8
1、3、5、7、
九、爬虫速度问题
十、数据清理问题(已解决)
解决方案:
- 一、使用item,在数据提取时进行清洗
十一、mongo数据插入策略,不要一条一条插入(已解决)
解决方案:
- 一、隔一定时间、积攒一定条数再插入数据库
十二、异常捕获问题(已解决)
解决方案:
- 一、写一个全局捕获异常的中间件,错误信息写入MongoDB
十三、数据库的执行计划
解决方案:
- 一、添加索引,执行计划去测,看一下是否是全局搜索还是索引
500ms以内比较好,1s以内也能接受。
十四、记录抓取数据(已解决)
解决方案:
- 一、记录日志
- 二、使用StatCollector扩展+中间件写入数据库
十五、添加MongoDB扩展,以便项目其他地方使用(已解决)
解决方案:
- 一、scrapy 添加自定义的extensions
十六、添加自定义dont_filter方法(已解决)
解决方案:
- 一、scrapy 添加自定义的extensions