以一个案例练习加深我们的scrapy利用crawlspider爬取全站数据的过程,以及在爬取过程中,怎么同时解析列表页以及详情页面,并提交给item。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
1.打开爬虫文件,设置请求。
我们设置好起始网址的URL,并在Rule中设置好allow的正则以便我们能爬取到翻页网址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
2.解析数据
这一步,与之前解析数据方法是一样的,同样根据请求的数据用xpath进行解析,获取我们想要的标题信息。不同之处在于,我们一般情况下回解析出两个数据,分别是详情页的URL和标题,其中详情页面的URL作为再次发起请求的网址,但是用crawlspider因为无法手动发请求,因此我们只解析出标题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
3.对详情页发起请求
上一步我们说道crawlspider因为无法手动发请求,那么怎么发起请求,获得详情页的数据信息呢?跟翻页发起请求的方法一样,我们通过Rule中设置好allow来获取请求数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
4.对详情页解析数据
根据我们上一步发起的请求,我们需要自定义解析详情页的数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
5.在item中定义属性值
由于我们并没有手动发送请求,因此不能将解析的两处数据放在一起,一起提交给item,因此我们需要自定义一个item方法同第一个item类似文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
6.将解析数据封装到item中并提交给管道
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
7.管道的设置
由于我们上一步解析的两个数据都是item,因此管道无法判断哪个item应该输出的内容,因此我们通过item的名称进行判断:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html
8.开启管道并运行
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/28359.html