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

无法从带有Scrapy的父节点和子节点/标记中获取文本

能正青
2023-03-14

在将此标记为重复之前,我已经搜索并尝试了在SO上找到的其他解决方案,它们是:

  1. 刮擦css选择器:获取所有内部标记的文本
  2. 如果子节点是Scrapy中其他节点的父节点,则如何使用XPath从子节点获取文本
  3. Scrapy获取包括子级在内的整个文本

我要从中提取的HTML是:

<span class="location">
    Mandarin Oriental Hotel
    <a class="" href="/search-results/Jalan+Pinang%252C+Kuala+Lumpur+City+Centre%252C+50088+Kuala+Lumpur%252C+Wilayah+Persekutuan./?state=Kuala+Lumpur" itemprop="addressRegion" title="Jalan Pinang, Kuala Lumpur City Centre, 50088 Kuala Lumpur, Wilayah Persekutuan.">
    Jalan Pinang, Kuala Lumpur City Centre, 50088 Kuala Lumpur, Wilayah Persekutuan.
    </a>
    ,
    <a class="" href="/search-results/?neighbourhood=Kuala+Lumpur&state=Kuala+Lumpur" title="Kuala Lumpur">
    Kuala Lumpur
    </a>
    ,
    <a class="" href="/search-results/?state=Kuala+Lumpur" title="Kuala Lumpur">
    Kuala Lumpur
    </a>
    <span class="" itemprop="postalCode">
        50088
    </span>
</span>

我想获取//span[@class='location']中的所有文本。

我试过:

  1. response.xpath(“//span[@class='location']//text()”).extract_first()
  2. response.css(“span.location*::text”).extract_first()
  3. response.css(“span.location::text”).extract_first()

全部只回文华东方酒店,不回完整地址。

编辑:文本应产生

文华东方酒店,吉隆坡市中心,吉隆坡市中心,吉隆坡50088

共有2个答案

刘兴朝
2023-03-14

使用response.css(“span.location::text”).extract_first(),您只获得第一个文本,因此可以尝试调用response.css(“span.location::text”).extract(),然后将其串联起来。

您还可以尝试获取整个父元素并从中删除标记:

from w3lib.html import remove_tags

data = response.css('span.location').get()
if not data:
    return
result = remove_tags(data)
酆鸿哲
2023-03-14

尝试使用下面的代码获取每个span的字符串表示形式,地址为:

for entry in response.xpath("//div[@class='entry']"):
    print(entry.xpath("normalize-space(./span[@class='location'])").extract_first())
 类似资料:
  • 我使用的xml文件“savedwsdl.txt”的部分内容如下... 我写了下面给出的java代码,应该用什么来获取wsdl的子节点名:消息标记名为“debitrequest”

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。

  • 我有一个XML文档,它包含一个非常复杂(对我来说)的结构,没有换行符。它有许多具有类似结构的元素: 我需要得到节点值的文本,这是节点成员的孩子也有孩子的名字与特定的文本(在这种情况下virtual_size)。也有可能存在几个类似的节点。我可以用[1]etc吗? 这让我知道了节点的名称,但是如何达到“值”节点呢?

  • 我有一个这样的结构` ...等等,在