在document之后,我可以从Python脚本运行scrapy,但无法获得scrapy结果。
这是我的蜘蛛:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from items import DmozItem
class DmozSpider(BaseSpider):
name = "douban"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/group/xxx/discussion"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
rows = hxs.select("//table[@class='olt']/tr/td[@class='title']/a")
items = []
# print sites
for row in rows:
item = DmozItem()
item["title"] = row.select('text()').extract()[0]
item["link"] = row.select('@href').extract()[0]
items.append(item)
return items
注意最后一行,如果我运行:
scrapy crawl douban
终端可以打印返回结果
但是我无法从Python脚本获得返回结果。这是我的Python脚本:
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log, signals
from spiders.dmoz_spider import DmozSpider
from scrapy.xlib.pydispatch import dispatcher
def stop_reactor():
reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = DmozSpider(domain='www.douban.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg("------------>Running reactor")
result = reactor.run()
print result
log.msg("------------>Running stoped")
我试图在reactor.run()
处得到结果,但它什么也不返回
我怎样才能得到结果?
我在问自己同样的问题时发现了你的问题,那就是:“我怎样才能得到结果?”。因为这里没有答案,所以我自己努力寻找答案,现在我有了答案,我可以分享:
或者对于scrapy 0.22(http://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script),将我的解决方案的最后一行替换为:
我的解决方案是根据http://www.tryolabs.com/Blog/2011/09/27/calling-scrapy-python-script/自由改编的。
在我的例子中,我将脚本文件放在scrapy项目级别,例如如果scrapy project/scrapyproject/spider,那么我将它放在scrapyproject/my script.py
终端打印结果,因为默认日志级别设置为
DEBUG
。从脚本运行spider并调用
log.start()
时,默认日志级别设置为INFO
。只需替换:
与
升级版:
要获得字符串形式的结果,可以将所有内容记录到一个文件中,然后从中读取,例如:
希望能有所帮助。
相关问题 更多 >
编程相关推荐