Scrapy启用下载中间件时无法写入pipeline

问题描述

使用Scrapy在爬取百度的过程中,在下载中间件中加入Selenium返回加载好的页面并解析,但是使用pipeline无法把爬到的数据写入文件

探索过程

  • 已经设置pipelines.py文件
    在这里插入图片描述
  • 已经在settings.py中打开管道
    在这里插入图片描述
  • spider文件中的处理函数parse()写了返回语句,控制台可以正常打印爬到的数据
    在这里插入图片描述
    在这里插入图片描述
  • 到此怀疑是项目框架出了问题,新建一个Scrapy project,写一个最简单的spiderpipeline文件,运行后发现可以写入
    在这里插入图片描述
  • 框架没有问题,对比两个项目,新建的这个项目没有开中间件,故怀疑是中间件的问题,将原项目的下载中间件注释掉,重新尝试,发现可以写入数据
    在这里插入图片描述
  • 将中间件复制到新建项目中运行,发现仍然可以写入文件,两个中间件无任何差异,故比较两者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的写入

猜你喜欢

转载自blog.csdn.net/qq_41983842/article/details/107866628
今日推荐