gpt4 book ai didi

html - Scrapy,如何从 中提取 s subtext

转载 作者:行者123 更新时间:2023-11-28 15:31:54 25 4
gpt4 key购买 nike

我有一个这样的 html:

<section id="SECTION_A">
<h4>List</h4>

<a style="text-decoration: none;" href="#list" data-toggle="collapse">
<div class="ITEM">
TEXT
</div>
</a>

<div id="IDENTIFICATION" class="collapse">

</div>

<a style="text-decoration: none;" href="#list" data-toggle="collapse">

<div class="ITEM2">
TEXT2
</div>
</a>
<div id="IDENTIFICATION2" class="collapse">

<div><b>TITLE</b>: CONTENT</div>

<div><b>TITLE2</b>: CONTENT2</div>
</div>
</section>

我已经将它存储在这样的选择器 XPATH 中,因为 html 有几个具有相似结构、标签和重复数据的部分:

sectionA = response.xpath('//section[@id="SECTION_A"]')

现在,我想提取 ITEMS 及其 IDENTIFICATIONS 并将它们写入文件。

提取 ITEM 没有问题:

item = sectionA.xpath('.//div/@class[contains(.,"ITEM")]').extract()

它返回:

[u'ITEM', u'ITEM2']

但我无法提取 ITEMS 的文本,我试过:

item = sectionA.xpath('.//div/@class[contains(.,"ITEM")]/text()').extract()

但返回一个空列表。

我也无法提取 IDENTIFICATIONS,其中一个问题是它们可能没有任何内容或多个内容,因此我尝试从 SECTIONA 选择器中提取其中的一个选择器,如下所示:

identifications = sectionA.xpath('.//div/@id[contains(.,"IDENTIFICATION")]')

它返回一个类似于 sectionA 的选择器,但是当我尝试在其中搜索时,我一无所获:

for id in identifications:
title= signature.xpath('.//div')

我已经尝试了 sevelal 组合,例如 .//div/b.//b 或只是 .// 但我得到了什么都没有。

有人知道我如何从这样的 html 中获取 ITEM-TEXT 和 IDENTIFICATIONS-CONTENT 吗?

最佳答案

您面临的问题不在应用的步骤中,而是一个逻辑错误。您没有在 'ITEM' 类 中获取 Text 的原因是您正在使用额外的 /

在您编写的代码中:

item = sectionA.xpath('.//div/@class[contains(.,"ITEM")]').extract()

这里返回[u'ITEM', u'ITEM2'],因为在//div/@class中@class之前使用了/ ,这基本上意味着:返回我在包含 "ITEM" 子字符串的类中使用的值。由于属性 @class 被指向这里,它返回 [] 因为没有要指向的文本。

你想做的是:

item = sectionA.xpath('.//div[contains(@class,"ITEM")]/text()').extract()

此处 sectionA.xpath('.//div[contains(@class,"ITEM")]') 的输出是选择器:

[<Selector xpath='.//div[contains(@class,"ITEM")]' data=u'<div class="ITEM">'>, <Selector xpath='.//div[contains(@class,"ITEM")]' data=u'<div class="ITEM2">'>]

在“IDENTIFICATIONS”的提取中也犯了类似的错误,还有一个更严重的逻辑问题。在 title = signature.xpath('.//div') 中使用 // 不是合适的方法,因为它不会显示 div 只是在 div IDENTIFICATIONS 中,而是尝试使用 HTML 中预设的 all divs。同样,这可能不是问题,除非在我们正在搜索的 div 之外有一个带有子字符串“IDENTIFICATION”的 div。因此,更好的方法是按照要求执行类似的操作:

>>> identification=sectionA.xpath('.//div[contains(@id,"IDENTIFICATION")]')
>>> for id in identification:
... print(id.xpath('div/b')).extract()

关于html - Scrapy,如何从 <b> 中提取 s subtext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44546360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com