【问题标题】:Scarpy outoput json抓取输出json
【发布时间】:2018-08-20 19:20:51
【问题描述】:

我正在努力使用 Scrapy 仅将“命中”输出到 json 文件。我是新来的,所以如果只有一个我应该查看的链接,那可能会有所帮助(我花了相当多的时间在谷歌上搜索,仍然在苦苦挣扎),尽管代码更正提示更受欢迎:)。

我正在学习 scrapy 教程 (https://doc.scrapy.org/en/latest/intro/overview.html) ,原始代码输出一个长列表,其中包括字段名称和输出,如“字段:输出”,其中同时出现空白和找到的项目。我只想包含找到的链接,并将它们不带字段名称输出到文件中。

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

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

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)

我已经尝试过“产量”和项目选项,但速度不够快,无法让它们发挥作用。我的长期目标是无需了解 html 树(这本身可能是错误的方法)即可访问网站,并在 URL 字符串中查找具有特定文本的 URL。

想法?我猜这并不太难,但超出了我的能力范围。

【问题讨论】:

    标签: scrapy


    【解决方案1】:

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

    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
       }
    

    【讨论】:

    • Thx Rastacode,感谢帮助...我认为需要另一个撇号,所以代码行将是 "jane_url = quote.xpath('.//a[contains(@href, "Jane ")]').extract_first() 我实际上已经让它与产量一起工作,但试图找出一种从输出中过滤掉字段名称的方法......不过,不用担心,感谢帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-06-27
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多