令人毛骨悚然的输出json

时间:2018-08-20 19:20:51

标签: scrapy

我正努力地与Scrapy一起仅将“匹配”输出到json文件。我是新来的人,因此,如果只有一个链接我应该查看,那可能会有所帮助(我花了很多时间在Google上搜索,但仍在苦苦挣扎),尽管更欢迎使用代码更正技巧:)。

我正在研究繁琐的教程(https://doc.scrapy.org/en/latest/intro/overview.html),原始代码将输出一长串,包括字段名称和类似“ field:output”之类的输出,其中同时显示空白和找到的项目。我只想包含找到的链接,并将不带字段名称的链接输出到文件中。

对于我正在尝试的以下代码,如果我发出“ scrapy crawl quotes2 -o quotes.json> output.json,它可以工作,但是quotes.json始终为空(即,包括如果我执行“ scrapy crawl quotes2- o quotes.json”)。

在这种情况下,作为实验,我只想返回URL中的字符串“ Jane”(例如/ author / Jane-Austen):

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes2"
    start_urls = [
        'http://quotes.toscrape.com/tag/humor/',
    ]

    def parse(self, response):
        for quote in response.css('a'):
            for i in quote.css('a[href*=Jane]::attr(href)').extract():
                if i is not None:
                    print(i)

我已经尝试过“ yield”和items选项,但是还不够快,无法使其正常工作。我的长期目标是去网站而不必了解html树(这本身可能是错误的方法),并在URL字符串中查找包含特定文本的URL。

有什么想法吗?我猜这不太难,但是超出了我。

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为您正在打印项目,所以必须明确告知Scrapy以“屈服”它们。 但是在此之前,我不明白为什么要遍历锚点节点,而不是为什么应该使用css或XPath选择器遍历引号,提取引号内的所有作者链接,最后检查该URL是否包含特定的String(简为你辩护)。

for quote in response.css('.quote'):
   jane_url = quote.xpath('.//a[contains(@href, "Jane")]').extract_first()
   if jane_url is not None:

      yield {
       'url': jane_url
   }