【问题标题】:Scrapy Shell XPathScrapy Shell XPath
【发布时间】:2015-03-03 09:26:23
【问题描述】:

我正在尝试从此 http://www.npr.org/rss/#feeds 新闻提要网站获取链接和类别。

这是我在 scrapy shell 中的 xpath:

a = sel.xpath('//ul[@class="rsslinks"]/li/a/@href').extract()

b = sel.xpath('//ul[@class="rsslinks"]/li/a/text()').extract()

但是 b 的长度比 a 的长度小一。我不知道我在这里错过了什么。但这会导致数据出现问题。

从下图中,类别名称是“通过电子邮件发送最多的故事”,但链接是“新闻头条”

任何帮助将不胜感激

【问题讨论】:

    标签: python xpath web-scraping scrapy scrapy-shell


    【解决方案1】:

    这是因为结果中的第一个链接:

    <a class="iconlink xml" href="/rss/rss.php?id=1001" target="blank"><strong>News Headlines</strong></a>
    

    如您所见,没有直接的子“文本”节点,只有一个strong 元素。您的 xpath 与它不匹配。

    添加另一个斜线以获取来自a 标签的所有文本节点:

    //ul[@class="rsslinks"]/li/a//text()
                             HERE^
    

    【讨论】:

    • 谢谢!这是非常有用的信息!
    • 在我看来,您的答案的措辞具有误导性,因为它表明存在一个名为“文本”的元素节点意义上的 text 元素,与 strong. 的方式相同请明确文本节点不是元素节点。
    • @MathiasMüller 非常好,谢谢,我认为现在应该更好了。而且,顺便说一句,感谢您为xpath 标签做出贡献 - 从您的答案中学到很多东西。
    • + 1,现在很好。还有,我只能回报你的赞美!
    【解决方案2】:

    带有 News Headlines 标签的 /rss/rss.php?id=1001 的文本似乎在 &lt;strong&gt; &lt;/strong&gt; 之下的另一层,而其他链接则不是。

    【讨论】:

    • 是的,我的错!没注意,谢谢帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2023-03-23
    • 2020-08-06
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多