问题描述
使用Scrapy在爬取百度的过程中,在下载中间件中加入Selenium返回加载好的页面并解析,但是使用pipeline无法把爬到的数据写入文件
探索过程
- 已经设置
pipelines.py
文件
- 已经在
settings.py
中打开管道
spider
文件中的处理函数parse()
写了返回语句,控制台可以正常打印爬到的数据
- 到此怀疑是项目框架出了问题,新建一个Scrapy project,写一个最简单的
spider
和pipeline
文件,运行后发现可以写入
- 框架没有问题,对比两个项目,新建的这个项目没有开中间件,故怀疑是中间件的问题,将原项目的下载中间件注释掉,重新尝试,发现可以写入数据
- 将中间件复制到新建项目中运行,发现仍然可以写入文件,两个中间件无任何差异,故比较两者
spider
文件的区别,发现start_url
字段是不同的,原项目是'https://www.baidu.com/'
,而新项目是'https://baidu.com/'
问题原因
在Scrapy的下载中间件中,每一次进行的请求,都可以设置通过中间件接管,本项目中我希望Selenium接管我第一次打开的百度的页面,打开后返回现成的网页内容给我,于是写了这么一个语句:
当我请求的url是'https://www.baidu.com/'
的时候才会交给Selenium接管,为了和click_page_url
保持一致,我在spider
文件中的start_url
字段中也写入'https://www.baidu.com/'
,没想到无法使用pipeline
,更改成'https://baidu.com/'
后,问题解决,可以写入,检查了中间件返回的response的url,仍然是
故暂不清楚为什么加上一个www
域名就会影响pipeline
的写入