如何解决Scrapy-Spash 不爬行
我正在尝试对通过以下链接搜索公司年度报告而返回的链接进行非常基本的打印:https://www.mergentarchives.com/searchResults.php?searchType=annualReports&companyName=3Com+Corp.&compNumber=37958&aracompNumber=0
我需要使用 Splash 来呈现链接,因为这个网站是用 JavaScript 编写的,并且搜索结果是动态加载的。当我尝试打印出链接列表时,抓取工具不会爬行。这是我非常简单的代码:
import scrapy
from scrapy_splash import SplashRequest
class MergentSpider(scrapy.Spider):
name = 'mergent'
start_urls = ['https://www.mergentarchives.com/searchResults.PHP?searchType=annualReports&companyName=3Com+Corp.&compNumber=37958&aracompNumber=0']
def parse(self,response):
url = response.url + "/searchResults.PHP?searchType=annualReports&companyName=3Com+Corp.&compNumber=37958&aracompNumber=0"
yield SplashRequest(url=url,callback=self.start)
def start(self,response):
for document in response.css("a::attr(onclick"):
print(document)
我添加了这些设置:
SPIDER_MIDDLEWARES = {
'mergent_scraper.middlewares.MergentScraperSpiderMiddleware': 543,'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,}
DOWNLOADER_MIDDLEWARES = {
'mergent_scraper.middlewares.MergentScraperDownloaderMiddleware': 543,'scrapy_splash.SplashCookiesMiddleware': 723,'scrapy_splash.SplashMiddleware': 725,'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,}
SPLASH_URL = 'http://127.0.0.1:8050'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
我正在使用 docker 使用此命令:
sudo docker run -it -p 8050:8050 --rm scrapinghub/splash
我做错了什么?为什么这只蜘蛛不会爬行?
解决方法
网站好像有登录?如果是这样,您需要查看:using-formrequest-from-response-to-simulate-a-user-login。抓取工具不会知道有登录表单。
一种快速测试方法是使用scrapy shell,发送启动请求并查看是否获得了您期望的页面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。