Scrapy:将参数传递给/ spiders目录

时间:2015-08-31 17:20:39

标签: python web-scraping scrapy

我正在编写一个脚本,使用CrawlerProcess来运行MySpider中定义的类mybot/spiders/myspider.py的蜘蛛。 这是我的代码的相关部分:

# in main.py
from scrapy.crawler import CrawlerProcess
from scrapy import signals
from scrapy.utils.project import get_project_settings
from scrapy.xlib.pydispatch import dispatcher

items = []
settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl("joe", domain='dictionary.com')
def add_item(item):
    items.append(item)
dispatcher.connect(add_item, signals.item_passed) # adds result from spider to items
process.start()

#in /spiders/myspider.py
from scrapy.spiders import Spider
from mybot.items import MyItem

name = "joe"
allowed_domains = ["dictionary.com"]
start_urls = ["http://dictionary.reference.com/"]

for sel in response.xpath('//tr[@class="alt"]'):
        new_item = MyItem()
        new_item['name'] = sel.xpath('td/a/text()')[0].extract()
        yield(new_item)

现在,我想更改程序,以便我可以从start_url将其他main.py传递给蜘蛛。看起来我可以通过

allowed_domains参数传递给蜘蛛
process.crawl("joe", domain='dictionary.com')

但我不知道如何概括。

我认为我必须重新定义MySpider的构造函数以接受可选参数,但它看起来不像main.py中的蜘蛛一样 (事实上​​,命令new_spider = MySpider()返回错误global name 'MySpider' is not defined

所以我的问题是双重的: 如何更改蜘蛛的构造函数? 如何将start_urlsmain.py传递给蜘蛛?

或者是否可能有完全不同的解决方案?

0 个答案:

没有答案