Scrapy。我没有结果
问题描述:
我有一个工作程序。但我的文件json是空的。 我的程序应该获得纽约时报的所有文章。Scrapy。我没有结果
class ParseSpider(CrawlSpider):
name = "new"
allowed_domains = ["www.nytimes.com"]
start_urls = ["https://www.nytimes.com/section/world?WT.nav=page&action=click&contentCollection=World&module=HPMiniNav&pgtype=Homepage®ion=TopBar"]
rules = (
Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=('//*[@id="story"]/div[3]/div[1]',)), callback="parse_items", follow= True),
)
def parse_item(self, response):
hxs = HtmlXPathSelector(response)
l = parseLoader(parse_item(), hxs)
l.add_value('url', response.url)
l.add_xpath('name', '//*[@id="headline"]' % u"Название статьи:")
l.add_xpath('text', '//*[@id="story"]/div[3]/div[1]' % u"Текст:")
我是改变方案。编辑:
rules = (
Rule(LinkExtractor(allow=(), restrict_xpaths=('//*[contains(@id,"story")]')), callback = 'parse_item'),
)
def parse_item(self, response):
l = parseLoader(response=response)
l.add_value('url', response.url)
l.add_xpath('name', '//*[@id="headline"]' % u"Название статьи:")
l.add_xpath('text', '//*[@id="story"]/div[3]/div[1]' % u"Текст:")
yield l.load_item()
答
看起来像你在你的parse_item
方法进行无限递归。
你不需要选择器,甚至不应该使用HtmlXpathSelector
。尝试:
def parse_item(self, response):
l = parseLoader(response=response)
l.add_value('url', response.url)
l.add_xpath('name', '//*[@id="headline"]' % u"Название статьи:")
l.add_xpath('text', '//*[@id="story"]/div[3]/div[1]' % u"Текст:")
yield l.load_item()
编辑:看起来像你的linkextractor规则不提取任何东西。
首先你不应该使用SgmlLinkExtractor
它已被弃用。其次,你的xpath不会捕获任何东西,在某些情况下,你正在使用的xpath过于具体和不正确。尝试:
LinkExtractor(allow=(), restrict_xpaths=('//*[contains(@id,"story")]',))
可以调试,并尝试这scrapy shell
命令:??
$ scrapy shell "https://www.nytimes.com/section/..."
from scrapy.linkextractor import LinkExtractor
le = LinkExtractor(allow=(), restrict_xpaths=('//*[contains(@id,"story")]',))
le.extract_links(response)
# 20 results will be printed
它并没有帮助我( – Maria
@Maria有什么错误,你可以张贴输出日志尝试运行'scrapy抓取myspider -s LOG_FILE =/some/directory/myspider.log'并与我们分享这个日志里有什么 – Granitosaurus
我不能这样做因为:IOError:[Errno 2]没有这样的文件或目录:'/ some/directory/new.log' – Maria