第一个Scrapy爬网程序工作,顺序中的后续爬网程序失败

ulydmbyx  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个脚本设置如下:

try:
    from Xinhua import Xinhua
except:
    error_message("Xinhua")

try:
    from China_Daily import China_Daily
except:
    error_message("China Daily")

try:
    from Global_Times import Global_Times
except:
    error_message("Global Times")

try:
    from Peoples_Daily import Peoples_Daily
except:
    error_message("People's Daily")

其目的是为每个站点运行Scrapy爬网程序,处理结果,并将结果上传到数据库。当我单独运行每个脚本时,每个部分都工作正常。然而,当我从我概述的代码块运行时,只有 * 第一个 * Scrapy爬行器实际上工作正常。所有后续的爬行器都试图访问它们应该访问的站点,但没有返回任何结果。我不知道我甚至没有得到正确的错误信息,只有一些“调试... 200无”和“[scrapy.crawler]信息:覆写的设定:{}”行。我也不认为问题是我的IP或任何东西被屏蔽;一旦爬虫失败,我立即单独启动它们,它们工作得很好。
我猜第一个爬虫留下了一些设置,干扰了后面的爬虫,但我没有找到任何东西。我可以重新安排它们的执行顺序,当其他爬虫失败时,总是第一个爬虫工作。
有什么想法吗?

vvppvyoh

vvppvyoh1#

我通过将每个Crawler合并到一个脚本中并使用CrawlerProcess运行它们来修复这个问题。

spider_settings = [
    {"FEEDS":{
        xh_crawl_results:{
            'format':'json',
            'overwrite':True
        }}},
    {"FEEDS":{
        cd_crawl_results:{
            'format':'json',
            'overwrite':True
        }}},
    {"FEEDS":{
        gt_crawl_results:{
            'format':'json',
            'overwrite':True
        }}},
    {"FEEDS":{
        pd_crawl_results:{
            'format':'json',
            'overwrite':True
        }}}
]

process_xh = CrawlerRunner(spider_settings[0])
process_cd = CrawlerRunner(spider_settings[1])
process_gt = CrawlerRunner(spider_settings[2])
process_pd = CrawlerRunner(spider_settings[3])

@defer.inlineCallbacks
def crawl():
    yield process_xh.crawl(XinhuaSpider)
    yield process_cd.crawl(ChinaDailySpider)
    yield process_gt.crawl(GlobalTimesSpider)
    yield process_pd.crawl(PeoplesDailySpider)
    reactor.stop()

print("Scraping started.")
crawl()
reactor.run()
print("Scraping completed.")

相关问题