python-3.x - 如何在 Scrapy 中运行多个相同的蜘蛛?
问题描述
我有一个 url 列表,例如 [' http://example.com/page1 ', http://example.com/page2 ',...]。
这些 url 在一个域名中,我已经用 Scrapy 编写了一个爬虫,我需要使用同一个爬虫一起运行这些 url。如果我有 10 个 url,我想创建 10 个相同的进程来运行爬虫以提高效率。有解决办法吗?
我尝试使用 CrawlerProcess 来运行爬虫,但是如果 url 太多,它会提醒我 TCP 连接太多的错误。虽然爬虫一直在运行,但是这种方式不利于维护。
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
page_urls = ['http://example.com/page1', 'http://example.com/page2',]
for page_url in page_urls:
process.crawl('vimeo', start_urls=[page_url])
process.start()
解决方案
如果目标是提高单个蜘蛛的并发请求数,而不是专门并行生成多个蜘蛛,我建议您简单地使用设置,如DOWNLOAD_DELAY
,CONCURRENT_REQUEST
或CONCURRENT_REQUESTS_PER_DOMAIN
.
推荐阅读
- reactjs - 在 web 应用程序中存储和管理新颖长度文本的最佳方法是什么?
- sql - 连接表上的 SQL 最小值
- java - 如何将背景图像放入 JFrame 中?
- python - 推理过程中“列出超出范围错误的索引”(本周出现)
- java - 为什么数据没有在数据库中插入代码中的任何错误
- http - 即使强制尝试设置为 false,Go http 请求也会退回到 http2
- java - 将数据保存到文本文件中
- ibm-cloud-functions - 我可以将 Cloud Functions 操作的执行时间延长到一个半小时吗?
- docker - 检测到任务失败:docker service create --name db --network backend --mount type=volume,source=db-data,target=/var/lib/postgresql/data postgres
- sql - 将多个查询合二为一