【发布时间】:2021-04-01 05:03:08
【问题描述】:
我有一个爬虫,它从网站上抓取数据并将抓取的数据上传到远程 MongoDB 服务器。我想将它托管在heroku上以自动抓取很长时间。
我正在使用 scrapy-user-agents 在不同的用户代理之间轮换。
当我在我的电脑上本地使用scrapy crawl <spider> 时,蜘蛛程序正常运行并将数据返回到 MongoDB 数据库。
但是,当我在 heroku 上部署项目时,我的 heroku 日志中出现以下几行:
2020-12-22T12:50:21.132731+00:00 app[web.1]: 2020-12-22 12:50:21 [scrapy.downloadermiddlewares.retry] 调试:重试
https://indiankanoon.org/browse/>(失败1 次):503 服务不可用 2020-12-22T12:50:21.134186+00:00 app[web.1]: 2020-12-22 12:50:21 [scrapy_user_agents.middlewares] 调试:分配的用户代理 Mozilla/5.0(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
(它同样失败了 9 次,直到:)
2020-12-22T12:50:23.594655+00:00 app[web.1]: 2020-12-22 12:50:23 [scrapy.downloadermiddlewares.retry] 错误:放弃重试
https://indiankanoon.org/browse/> (失败9次):503 Service Unavailable 2020-12-22T12:50:23.599310+00:00 app[web.1]: 2020-12-22 12:50:23 [scrapy.core.engine] 调试:已爬网 (503)
2020-12-22T12:50:23.701386+00:00 app[web.1]: 2020-12-22 12:50:23 [scrapy.spidermiddlewares.httperror] 信息:忽略响应 https://indiankanoon.org/browse/>: HTTP 状态码未处理或不允许
2020-12-22T12:50:23.714834+00:00 app[web.1]: 2020-12-22 12:50:23 [scrapy.core.engine] 信息:关闭蜘蛛(已完成)
总而言之,我的本地 IP 地址能够抓取数据,而 Heroku 尝试时却无法。更改 settings.py 文件中的某些内容可以纠正它吗?
我的 settings.py 文件:
BOT_NAME = 'indKanoon'
SPIDER_MODULES = ['indKanoon.spiders']
NEWSPIDER_MODULE = 'indKanoon.spiders'
MONGO_URI = ''
MONGO_DATABASE = 'casecounts'
ROBOTSTXT_OBEY = False
CONCURRENT_REQUESTS = 32
DOWNLOAD_DELAY = 3
COOKIES_ENABLED = False
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
}
ITEM_PIPELINES = {
'indKanoon.pipelines.IndkanoonPipeline': 300,
}
RETRY_ENABLED = True
RETRY_TIMES = 8
RETRY_HTTP_CODES = [500, 502, 503, 504, 522, 524, 408]
【问题讨论】:
-
它有一个 DDoS 保护程序。可能所有云服务 IP 都像 Heroku IP 一样被禁止。您应该使用代理。
标签: python heroku web-scraping scrapy http-status-code-503