【问题标题】:Scrapy - Cleaning up text[/p] from nested links[/a] etcScrapy - 从嵌套链接 [/a] 等中清理文本 [/p]
【发布时间】:2018-10-08 01:47:54
【问题描述】:

我是 python 和刮的新手。尽管如此,我还是花了几天时间尝试从其存档中抓取新闻文章 - 成功。

问题是,当我抓取文章 <p> 的内容时,该内容充满了额外的标签,例如 - stronga 等。因此,scrapy 不会把它拉出来,我只剩下新闻了文章占正文的 2/3。将在下面尝试 HTML:

<p> According to <a> Japan's newspapers </a> it happened ... </p>

现在我尝试用谷歌搜索并查看这里的论坛。有一些建议,但根据我的尝试,它不起作用或破坏了我的蜘蛛:

我已阅读有关规范化空间和删除标签的信息,但它没有用。感谢您提前提供任何见解。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请不要将您的代码作为图像发布。难以阅读,阻止基于文本的搜索,并降低帖子的整体展示价值。

标签: scrapy scrapy-spider scrape


【解决方案1】:

请提供您的选择器以获得更详细的帮助。

鉴于您所描述的内容,我猜您正在选择 p/text() (xml) 或 p::text (css),这不会在 &lt;p&gt; 元素的子元素中获取文本。

您应该尝试选择response.xpath('//p/descendant-or-self::*/text()') 以获取&lt;p&gt; 中的文本及其所有子项。

你也可以只选择&lt;p&gt;,而不是它的文本,你也会得到它的孩子。从那里您可以开始清理标签。关于如何做到这一点,有answered questions

【讨论】:

  • 要去读它。尝试了上面建议的解决方案,atm 试图谷歌如何实现它。内容的选择器是: item['content'] = response.xpath('//div[@class="postBody"]/p/text()').extract()
  • 是的,请参阅我关于如何选择后代或自己的文本的编辑。我相信这会解决你的问题。
  • 太棒了,非常感谢!如果可以的话,只有一个问题,我可以将相同的东西应用到其他选择器[项目]中。如果网站在作者的突出日期有链接,也会发生同样的事情......?
  • 你应该可以在任何你喜欢的地方应用这个选择器模式,只要路径是有效的,你就会得到那里的东西。
  • 另外,如何在 scrapy 中解决这个问题的另一件事 - 当我有 /text() 时,我可以只写 //text() 它显然做同样的事情。
【解决方案2】:

你可以使用 string.replace(,)

new_string = old_string.replace("<a>", "")

您可以将其集成到一个循环中,该循环遍历包含您要丢弃的所有子字符串的列表。

【讨论】:

  • 感谢您的回答。最后,似乎 Pwinz 解决了它。不过感谢您的努力:)
猜你喜欢
  • 1970-01-01
  • 2015-10-09
  • 2017-02-03
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2015-03-01
相关资源
最近更新 更多