【问题标题】:How to run a Scrapy scraper multiple times, simultaneously, on different input websites and write to different output files?如何在不同的输入网站上同时多次运行 Scrapy 刮板并写入不同的输出文件?
【发布时间】:2015-11-10 21:01:11
【问题描述】:

有谁知道我如何在不同的网站上运行相同的 Scrapy scraper 超过 200 次,每个网站都有各自的输出文件?通常在 Scrapy 中,当你从命令行运行它时,你会通过输入 -o filename.json. 来指明输出文件

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    多种方式:

    • Create a pipeline 删除具有可配置参数的项目,例如运行scrapy crawl myspider -a output_filename=output_file.txt。 output_filename 作为参数添加到蜘蛛,现在您可以从如下管道访问它:

      class MyPipeline(object):
          def process_item(self, item, spider):
              filename = spider.output_filename
              # now do your magic with filename
      
    • 您可以run scrapy within a python script,然后也可以对输出项进行操作。

    【讨论】:

    • 我不明白这如何回答如何同时多次运行此脚本的问题。
    • 因为可以在命令行中定义输出文件,所以可以调用同一个命令爬取蜘蛛,每次定义不同的输出文件
    【解决方案2】:

    我也在做类似的事情。这是我所做的:

    1. 像往常一样编写爬虫,但确保实现feed exports。我让源导出将结果直接推送到 S3 存储桶。另外,我建议您接受该网站作为脚本的命令行参数。 (Example here)
    2. 设置 scrapyd 以运行您的蜘蛛
    3. 使用scrapyd-client打包并部署你的蜘蛛到scrapyd
    4. 现在,使用您的网站列表,只需向您的 scrapyd 进程的每个 URL 发出一个 curl 命令。

    我已经使用上述策略浅抓取了 200 万个域名,不到 5 天就完成了。

    【讨论】:

    • 感谢您的回复。这将要求我为每个 URL 键入一行?我每天无限期地抓取 422 个网站。真的很想能够自动化它。查看我的最新帖子了解我的位置:stackoverflow.com/questions/33663877/…
    • 您应该只制作一个每个 url 一行的文本文件。然后编写一个脚本来遍历文件,调用scrapyd url。
    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多