【发布时间】:2020-03-13 13:29:17
【问题描述】:
我创建了一个CrawlSpider,它应该遵循所有“内部”链接,直到一定数量的项目/页面/时间。
我正在使用multiprocessing.Pool 同时处理几个页面(例如 6 个工作人员)。
我确实从一个单独的 python 脚本调用 CrawlSpider 和 os.systemcomand:
import os
...
cmd = "scrapy crawl FullPageCrawler -t jsonlines -o "{0}" -a URL={1} -s DOWNLOAD_MAXSIZE=0 -s CLOSESPIDER_TIMEOUT=180 -s CLOSESPIDER_PAGECOUNT=150 -s CLOSESPIDER_ITEMCOUNT=100 -s DEPTH_LIMIT=5 -s DEPTH_PRIORITY=0 --nolog'.format(OUTPUT_FILE, url.strip())"
os.system(cmd)
它在我的某些页面上运行良好,但对于特定页面,crawler 没有遵循我的任何设置。
我试图定义以下内容(我认为它会这样做):CLOSESPIDER_PAGECOUNT:他将遵循的总页数? CLOSESPIDER_ITEMCOUNT: 不确定这个。 PAGECOUNT 有什么区别? CLOSESPIDER_TIMEOUT:爬虫应该工作的最长时间。
现在我面临一个示例,该示例已经爬取了 4000 多个页面(或项目?!)并且已经爬了 1 个多小时。
我是否因为同时定义了所有内容而遇到这种情况?
我是否还需要在settings.py 中定义相同的设置?
其中一个对我来说就足够了吗? (例如,最长正常运行时间 = 10 分钟)
我尝试使用subprocess.Popen 而不是os.system,因为它有一个wait 函数,但这也没有按预期工作。
毕竟使用os.system 是我尝试过的最稳定的东西,我想坚持下去。唯一的问题是scrapy
我尝试在 SO 上搜索答案,但找不到任何帮助!
编辑: 上面的示例最终得到了 16.009 个抓取子页面和超过 333 MB。
【问题讨论】:
标签: python scrapy timeout limit