当前位置: 首页 > 面试题库 >

如何在Python脚本中运行Scrapy

华瀚漠
2023-03-14
问题内容

我不知道应该把我的Spider代码放在哪里以及如何从main函数中调用它。请帮忙。这是示例代码:

# This snippet can be used to run scrapy spiders independent of scrapyd or the scrapy command line tool and use it from a script. 
# 
# The multiprocessing library is used in order to work around a bug in Twisted, in which you cannot restart an already running reactor or in this case a scrapy instance.
# 
# [Here](http://groups.google.com/group/scrapy-users/browse_thread/thread/f332fc5b749d401a) is the mailing-list discussion for this snippet. 

#!/usr/bin/python
import os
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'project.settings') #Must be at the top before other imports

from scrapy import log, signals, project
from scrapy.xlib.pydispatch import dispatcher
from scrapy.conf import settings
from scrapy.crawler import CrawlerProcess
from multiprocessing import Process, Queue

class CrawlerScript():

    def __init__(self):
        self.crawler = CrawlerProcess(settings)
        if not hasattr(project, 'crawler'):
            self.crawler.install()
        self.crawler.configure()
        self.items = []
        dispatcher.connect(self._item_passed, signals.item_passed)

    def _item_passed(self, item):
        self.items.append(item)

    def _crawl(self, queue, spider_name):
        spider = self.crawler.spiders.create(spider_name)
        if spider:
            self.crawler.queue.append_spider(spider)
        self.crawler.start()
        self.crawler.stop()
        queue.put(self.items)

    def crawl(self, spider):
        queue = Queue()
        p = Process(target=self._crawl, args=(queue, spider,))
        p.start()
        p.join()
        return queue.get(True)

# Usage
if __name__ == "__main__":
    log.start()

    """
    This example runs spider1 and then spider2 three times. 
    """
    items = list()
    crawler = CrawlerScript()
    items.append(crawler.crawl('spider1'))
    for i in range(3):
        items.append(crawler.crawl('spider2'))
    print items

# Snippet imported from snippets.scrapy.org (which no longer works)
# author: joehillen
# date  : Oct 24, 2010

问题答案:

所有其他答案均参考Scrapyv0.x。根据更新的文档,Scrapy 1.0要求:

import scrapy
from scrapy.crawler import CrawlerProcess

class MySpider(scrapy.Spider):
    # Your spider definition
    ...

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})

process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished


 类似资料:
  • 问题内容: 我有一个脚本,可以创建网站并动态打印一些数据。-打印的数据应来自另一个python脚本。 我目前面临的问题是,如果我将执行python脚本的行放在执行应用程序的行之前,它将运行Python脚本而不运行;反之亦然。 Python脚本: Flask脚本(注意:价格应为其他脚本的“解析”变量): 问题答案: 使用: 将python脚本(例如)生成的内容包装到函数中。 将其放置在与或相同的目录

  • 问题内容: 我是python的新手。只知道什么是python。我创建了以下代码(在python IDLE中): 然后,我将此页面保存在本地主机中为index.py 我使用http://localhost/index.py运行脚本 但是它没有显示执行的python脚本。而是将上面的代码显示为HTML。问题出在哪儿?请有人告诉我如何在网页中运行python吗? 问题答案: 为了显示您的代码,您需要执行

  • 问题内容: 我有一个脚本,每5分钟检查一次PC上的内容,并且我不希望Python显示在任务栏上。我使用Windows作为操作系统。 有什么方法可以让Python在后台运行并强制其不在我的任务栏中显示? 问题答案: 在控制面板中查找计划任务。

  • 问题内容: 我正在编写一个python脚本,该脚本可以检查各种条件并相应地运行powershell脚本,以帮助我自动完成从Windows XP到Windows 7的迁移。powershell脚本提供了自己的输出,可让用户了解发生的情况。我想获取powershell脚本的输出并将其打印为python脚本的输出。我环顾了一些问题,这些问题似乎想做同样的事情,但似乎对我没有帮助。最初我尝试使用 如此处的

  • 问题内容: 之前曾在不同程度上提出过这样的问题,但我觉得还没有以简明的方式回答,因此我再次提出。 我想在Python中运行脚本。可以说是这样的: 它获取文件位置,读取它,然后打印其内容。没那么复杂。 好吧,那我该如何在C#中运行它呢? 这就是我现在所拥有的: 当我传递位置和位置无效时。有人告诉我,我应该通过的,然后作为。 我已经寻找了一段时间,只能找到建议使用IronPython或类似工具的人。但

  • 我最近遵循了一个关于网络抓取的教程,作为该教程的一部分,我必须执行(?)我在命令行中编写的脚本。现在脚本每小时运行一次,我不知道如何阻止它。 我想停止脚本运行。我试图删除代码,但脚本仍然运行。那我该怎么办?