当前位置: 首页 > 知识库问答 >
问题:

Scrapy/XPATH:如何仅从后代和self中提取文本

应和光
2023-03-14

我有以下简单的嵌套结构:

<main>
    <em>bla-bla</em>

    <div class="1">1.1</div>

    <div class="2">2.1</div>

    <div class="2">2.2</div>

    <div class="1">1.2</div>

    <div class="2">
        <span>
            <em>2.3</em>
        </span>
    </div>

    <div class="2">2.4</div>

</main>

我现在想从所有节点中提取所有文本,但与嵌套节点(等等)斗争。

预期产出应为:

2.1
2.2
2.3
2.4

尝试类似于:

//div[contains(@class,"2")]/text()

给出

2.1
2.2
<div class="2"><span><em>2.3</em></span></div>
<div class="2"><span><em>2.3</em></span></div>
2.4

我没有使用直接的XPATH,而是尝试使用Scrapy中的几个步骤,例如:

divs = response.xpath("//div[contains(@class,"2")]")

for div in divs:
   # now check somehow that the div contains an "em" node

使用

div.xpath("//em")

不起作用,因为它给出了所有节点。在这里使用div.extract()并查看返回的字符串,我当然可以找到使用字符串搜索的方法,但这是一个很大的漏洞,看起来不像是一个合适的解决方案。

对于如何直接使用Xpath或使用Scrapy解决这一问题的任何建议都将非常感谢。

共有1个答案

胥康安
2023-03-14

对于[i.strip()for i in response.xpath('//div[contains(@class,“2”)]//text()').extract()if i.strip()]您有什么看法?

没有剥离,它也给出了一些空的情况:

>>> response.xpath('//div[contains(@class, "2")]//text()').extract()
[u'2.1', u'2.2', u'\n        ', u'\n            ', u'2.3', u'\n        ', u'\n    ', u'2.4']

因此我使用strip筛选它们:

>>> [i.strip() for i in response.xpath('//div[contains(@class, "2")]//text()').extract() if i.strip()]
[u'2.1', u'2.2', u'2.3', u'2.4']
 类似资料:
  • 大家好,我想使用scrapy中的xpath从html块中提取所有文本 假设我们有这样一个块: 我想将文本摘录为[“blahblah”,“blahblah”,“blihblih”]。我希望xpath在div节点中递归查找文本。我听说过try:,但它不提取嵌套元素。 干杯!SEB

  • 我正在尝试使用Scrapy在python上用一个简单的蜘蛛代码提取web新闻的每个标题的文本。我将html代码的一部分留在下面 null null 因此,我想摘录H4中的文本。为此,我使用Scrapy在python中编写了以下代码: 在PowerShell中运行代码时没有错误。然而,它并没有废弃任何东西 我在下面留下部分留言 该代码在其他网页中工作。我不知道我是否正确地编写了xpath(我尝试过用

  • 解析一个超文本标记语言文件。但是我需要排除灰色,我现在为黑色做了,但是灰色有很多变化,如果条件允许我知道如何使用它。 这就是我如何排除黑色,但在这里我也想排除灰色。

  • 我只想解决一个问题。我想在Scrapy中使用XPath从以下HTML中提取文本。 如何从上面的HTML中提取文本。我尝试使用XPath提取文本 > '//*[@class=“job-description”]' //[@id=“main”]/div/div/div[1]/div[1]/div/div[2]/div[2]//text() 6.'//div[@class=“job-descriptio

  • 我对web刮刮、scrapy和Python都是新手。我试着从这个网站页面刮数据。 我想提取页面页脚中给出的电子邮件id:info@bikramyogasg.com,并尝试使用两个XPath在scrapy Spider中提取: 相对:id(“gkfooternav”)/div/p/span/a/text() 绝对:/html/body/div[4]/div1/div/div/div/p/span/a

  • 问题内容: 我正在尝试使用提取此 PDF文件中包含的文本。 我正在使用PyPDF2模块,并具有以下脚本: 运行代码时,得到以下输出,该输出与PDF文档中包含的输出不同: 如何提取PDF文档中的文本? 问题答案: 要从PDF提取文本,请使用以下代码