【发布时间】:2022-01-22 06:02:01
【问题描述】:
我正在尝试使用 Scrapy 从网站上抓取文本并构建文本数据集及其一些功能。对于每个包含文本的元素,我将保存文本本身、元素类型和其他一些内容。它在大多数情况下都可以正常工作,但它不会抓取嵌套元素后面的部分文本。
输入示例:
<p>
First part of text
<b>
Nested text
</b>
Second part of text
</p>
输出(只是一个例子,实际上输出保存到csv):
text: First part of text, element: p
text: Nested text, element: b
预期输出(只是一个例子,实际上输出保存到 csv):
text: First part of text, element: p
text: Nested text, element: b
text: Second part of text, element: p
我负责抓取文本的部分代码:
for element in response.xpath('//*[normalize-space(text())]'):
...
text_normalized = element.xpath('normalize-space(./text())').get()
...
如何获得文本的第二部分?期望一个元素可以包含多个嵌套元素,并且文本本身可以分成多于 2 个部分。
【问题讨论】:
-
与您的问题没有直接关系,因为您决定使用 xpath,但考虑使用 beautifulsoup。将它与scrapy一起使用也是标准的,scrapy的文档本身建议在某些时候使用beautifulsoup。我自己使用网络抓取,它提供了一组功能来更好地处理这种确切的情况。它比使用 xpath 本身更强大
-
例如,有一些函数可以让你递归地找到 ,而不是只找到你正在搜索的元素的直接 b。您还可以对之前找到的元素执行搜索。您还可以浏览子元素、父元素、“兄弟”元素并执行搜索。挺好用的
标签: python html web-scraping scrapy