我正在编写一个脚本,使用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_urls
从main.py
传递给蜘蛛?
或者是否可能有完全不同的解决方案?