python - 如何在scrapy中处理大量请求?

标签 python memory web-scraping scrapy

我正在抓取大约 2000 万个网址。但是在实际发出请求之前,由于内存使用过多(4 GB RAM),进程被终止。我怎样才能在 scrapy 中处理这个问题,这样进程就不会被杀死?

class MySpider(Spider):
name = "mydomain"
allowed_domains = ["mydomain.com"]
urls = []
for d in range(0,20000000):
    link = "http://example.com/"+str(d)
    urls.append(link)
start_urls = urls

def parse(self, response):
    yield response

最佳答案

我想我找到了解决方法。 将此方法添加到您的蜘蛛。

def start_requests(self):
    for d in range(1,26999999):
        yield scrapy.Request("http://example.com/"+str(d), self.parse)

您不必在开头指定 start_urls。

它将开始生成 URL 并开始发送异步请求,当 scrapy 获得响应时将调用回调。开始时内存使用量会更多,但稍后会占用恒定内存。

除此之外,您还可以使用

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

通过使用它,您可以暂停爬虫并使用相同的命令随时恢复它

并且为了节省CPU(和日志存储要求) 使用

LOG_LEVEL = 'INFO'

在scrapy项目的settings.py中。

关于python - 如何在scrapy中处理大量请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34036166/

相关文章:

python - PyCharm 检查 - 具有可替换参数的 mysql 查询

c++ - DLL 内部的内存分配返回空指针

java - 无法使用::before 通过 div 内的 xpath 获取元素

python - 我想提取成员(member)链接

python - Scrapy - 如何获取重复的请求引用者

python - Google 距离矩阵 API 返回 'ZERO_RESULTS'

python - 如何在 Django 中访问 table_name 变量?

python - 共享主机上的 Django 站点出现问题

c++ - C++ 中的 vector 如何使用内存?

java - 准确测量物体尺寸