我不知道应该把我的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脚本的输出。我环顾了一些问题,这些问题似乎想做同样的事情,但似乎对我没有帮助。最初我尝试使用 如此处的
我最近遵循了一个关于网络抓取的教程,作为该教程的一部分,我必须执行(?)我在命令行中编写的脚本。现在脚本每小时运行一次,我不知道如何阻止它。 我想停止脚本运行。我试图删除代码,但脚本仍然运行。那我该怎么办?
问题内容: 我有一个在Linux上运行的Python(3)脚本,称为主脚本,该脚本必须从专有DLL调用例程。到目前为止,我已经使用Wine使用以下结构解决了这个问题: 脚本 dll_call.py 由Wine下安装的Windows Python(3)解释器执行。它将返回值转储到一个文件中,然后由等待的主脚本拾取该文件。如果我必须连续执行几次,它不是完全可靠且令人痛苦的缓慢。 我想一次启动脚本 dl