关于JSPageMiddleware的问题

来源:9-5 其余动态网页获取技术介绍-chrome无界面运行、scrapy-splash、selenium-grid, splinter

慕盖茨7348004

2019-02-27

老师,您在8-4 小节 selenium 集成到scrapy中,用jobbole做测试,我发现图片无法被下载,禁用了这个中间件又恢复正常。这是为什么呢?下面是报错信息:

2019-02-27 00:44:52 [scrapy.pipelines.files] ERROR: File (unknown-error): Error processing file from <GET http://wx3.sinaimg.cn/mw690/7cc829d3ly1fyvkjyngtoj218g0tmdlf.jpg> referred in

写回答

1回答

慕盖茨7348004

提问者

2019-02-27

老师,我不知道为什么图片下载不了,但这个问题我初步解决了,就在jspagemiddle中return HtmlResponse前加了个 if 条件,可是为什么它无法请求图片url呢?还有更通用的解决办法吗?

def process_request(self, request, spider):
       if spider.name == "jobbole":
               spider.browser.get(request.url)

                ##下面是条件,如果是图片url,那么还是需要交给下载器下载,不直接返回response

               image_format = [".jpg", ".jpeg", ".png"]
               if all(x in request.url for x in image_format):
                       # 已经通过 chrome 获取页面,直接返回 response,不用交给下载器重复下载了
                       return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)

0
5
bobby
回复
慕盖茨7348004
本身就应该交给下载器去下载啊,这个很合理啊, 因为你自己写的middleware无法处理图片的下载,本身scrapy的下载器又提供了下载的
2019-03-07
共5条回复

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5795 学习 · 6290 问题

查看课程