【问题标题】:XPath with Scrapy node begins with \n带有 Scrapy 节点的 XPath 以 \n 开头
【发布时间】:2015-08-08 04:00:15
【问题描述】:

我在 html 上使用 scrapy,例如:

<td nowrap="" valign="top" align="right">
    <br>
    Text is here.
    <br>
    Other text is here
    <br>
</td>

td[1]/text()[1] 给我:

(empty line)
Text is here.

我尝试过 normalize-space,即 normalize-space(td[1]/text()[1]),当我在我的 firefox 扩展程序中测试时,它有效,但在 scrapy 中无效。我认为scrapy被 \n 绊倒并且它跳过(或者只需要第一行节点,这没什么)。我也尝试了一些“前面”和“后面”的代码,但我认为它可能被认为是一个元素,我的 DOM 说 nodeValue = "\nText is here" 有什么想法吗?,

【问题讨论】:

  • 你还没有说出你真正期望或想要得到的结果。换句话说,“作品”是什么意思?你希望得到一个空字符串吗?您是否希望得到“文本在这里。其他文本在这里。”?还是有什么不同?
  • 我认为我们需要一个新的首字母缩写词:WRDYW & WRDYG?你想要什么结果,得到了什么结果?

标签: python xpath scrapy


【解决方案1】:

提取每个文本,通过索引获取所需的文本。例如:

response.xpath("//table[@id='myid']/tr[1]/td[1]//text()")[1]

来自 Scrapy Shell 的演示:

$ scrapy shell http://www.trobar.org/troubadours/coms_de_peiteu/guilhen_de_peiteu_01.php
In [1]: table = response.xpath("//table")[2]
In [2]: td = "".join(table.xpath(".//td[1]//text()").extract())
In [3]: print(td)

Companho, farai un vers qu'er covinen,
Et aura-i mais de foudatz no-y a de sen,
Et er totz mesclatz d'amor e de joy e de joven.

E tenguatz lo per vilan qui no-l enten,
O dins son cor voluntiers non l'apren:
Greu partir si fai d'amor qui la troba a talen.

Dos cavalhs ai a ma sselha, ben e gen,
Bon son et adreg per armas e valen,
E no-ls puesc amdos tener, que l'us l'autre non cossen.

Si-ls pogues adomesjar a mon talen,
Ja no volgr'alhors mudar mon garnimen,
Que meils for'encavalguatz de nuill ome viven.

Launs fon dels montaniers lo plus corren,
Mas aitan fer' estranhez'a longuamen
Et es tan fers e salvatges, que del bailar si defen.

L'autre fon noyritz sa jus part Cofolen
Ez anc no-n vis bellazor, mon escien:
Aquest non er ja camjatz ni per aur ni per argen.

Qu'ie-l donei a son senhor polin payssen,
Pero si-m retinc ieu tan de covenen
Que, s'ilh lo tenia un an, qu'ieu lo tengues mais de cen.

Cavalier, datz mi cosselh d'un pessamen:
-Anc mays no fuy issaratz de cauzimen- :
Res non sai ab qual me tengua, de n'Agnes o de n'Arsen.

De Gimel ai lo castel e-l mandamen,
E per Niol fauc ergueill a tota gen:
C'ambedui me son jurat e plevit per sagramen.

【讨论】:

  • 当我只使用 td[1]/text() 提取时,我得到一个空列表“[]”。所以索引超出范围。
  • @ChrisDH 好的,td[1]//text() 呢?
  • 也是空的,初始的 \n 一定是把它扔掉了,我们应该发消息,我可以只是实际的链接吗?
  • @ChrisDH 是的,请分享一个实际的网址,以便我可以尝试重现问题而不是猜测。谢谢。
  • 链接是trobar.org/troubadours/coms_de_peiteu/guilhen_de_peiteu_01.php 我正在尝试获取左列以及左列的第一行,所以:/html/body/center/table[2]/tbody /tr/td[1]/br[1]/following-sibling::text() 和 /html/body/center/table[2]/tbody/tr/td[1]/br[1]/following-兄弟::text()[1],规范化空间在浏览器中工作,但不是scrapy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
相关资源
最近更新 更多