已安装Reactor与请求版本不匹配,Scrapy-Playwright爬虫故障
Scrapy-Playwright 反应器不匹配问题求助
尝试运行scrape-playwright文档中的滚动爬取示例,目标站点为quotes.toscrape.com/scroll,但因反应器不匹配问题无法正常爬取,报错信息如下:
URL SPIDER TEST *********************** SCRAPE STARTED *********************** 2022-08-11 15:47:38 [scrapy.crawler] INFO: Overridden settings: {'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'} crawled: <Deferred at 0x11ef17e50 current result: <twisted.python.failure.Failure builtins.Exception: The installed reactor (twisted.internet.selectreactor.SelectReactor) does not match the requested one (twisted.internet.asyncioreactor.AsyncioSelectorReactor)>>
完整爬虫代码:
import csv import json import pygsheets import scrapy from scrapy_playwright.page import PageMethod import json from scrapy.utils.log import configure_logging from scrapy.utils.project import get_project_settings from scrapy.utils.reactor import install_reactor from scrapy.crawler import CrawlerProcess from scrapy.crawler import CrawlerRunner import datetime as dt from datetime import date from twisted.internet import reactor, defer import tempfile def breaker(comment): print('***********************') print(comment) print('***********************') class UrlSpider(scrapy.Spider): name = "Url" custom_settings={ 'DOWNLOAD_HANDLERS':{ "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", }, "TWISTED_REACTOR": "twisted.internet.asyncioreactor.AsyncioSelectorReactor", } def start_requests(self): yield scrapy.Request( url='http://quotes.toscrape.com/scroll', meta=dict( playwright=True, playwright_include_page=True, playwright_page_methods=[ PageMethod('wait_for_selector','div.quote'), PageMethod('evaluate','window.scrollBy(0, document.body.scrollHeight)'), PageMethod('wait_for_selector','div.quote:nth-child(11)'), ], ), ) async def parse(self, response): page=response.meta['playwright_page'] await page.screenshot(path='quotes.png',full_page=True) await page.close() return {'quotes_count':len(response.css('div.quote'))} print('URL SPIDER TEST') configure_logging() settings=get_project_settings() runner = CrawlerRunner(settings) @defer.inlineCallbacks def crawl(): breaker('SCRAPE STARTED') bug=runner.crawl(UrlSpider) reactor.close() yield bug url_list=crawl() print('crawled: '+str(url_list)) reactor.run()
补充说明:
- 已排查数小时仍未解决,使用CrawlerRunner(为后续自动化需求)和切换为CrawlerProcess均报相同错误。
- 因
get_project_settings加载项目设置存在问题,故使用自定义settings确保配置生效。 - 若移除
TWISTED_REACTOR设置,爬虫虽能运行但无法获取任何结果,特此求助。
内容的提问来源于stack exchange,提问作者Omega001
相关产品推荐
相关产品推荐

