有换行符和嵌套标记

2024-10-05 15:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

免责声明:scrapy新手。在

我有一个表,它的行很不规则,基本结构是:

<tr>
 <td> some text </td>
 <td> some other text </td>
 <td> yet some text </td>
</tr>

但偶尔(几百次)有些行

^{pr2}$

或由1或2个嵌套的“p”“div”和“span”组成的其他排列,包含或不包含返回行字符。在

我已经处理了嵌套的“span span”或“p div”或“div span”,条件语句的形式如下:

for row in allrows:
      if  row.select('td[2]/text()'):
            item['seconditem']=row.select('td[2]/text()').extract()
      elif row.select('td[2]/*/text()'):
            item['seconditem']=row.select('td[2]/*/text()').extract()
      elif row.select('td[2]/*/*/text()'):
            item['seconditem']=row.select('td[2]/*/*/text()').extract()

现在我有两个问题:

(1)是有条件的

td[2]/*/*/text()

处理不规则嵌套行的正确方法是什么?在

(2)我仍然遗漏了所有在标签前有返回(或换行)的情况。 因此,如果行的形式是:

   <td><div>
      <p>text </p>
   </div></td>

我的xpath只返回一个['\n']。有什么诀窍可以抓住换行符后面的内容吗?在

有什么建议吗。谢谢。在


Tags: textdiv声明extractsomeitem条件select
1条回答
网友
1楼 · 发布于 2024-10-05 15:27:01

可以使用XPath表达式中的string()函数在一个字符串中获取所有内部文本节点:

# nested.html - your second html snippet
# $scrapy shell "nested.html" 

In [1]: row = hxs.select('//tr')

In [2]: row.select('td[2]').select('string()').extract()
Out[2]: [u'   some other text  ']

In [3]: row.select('td[2]').select('string()').extract()[0]
Out[3]: u'   some other text  '

In [4]: row.select('td[3]').select('string()').extract()[0]
Out[4]: u'  \r\n   yet some text  \r\n     '

//text()获取所有内部text节点:

^{pr2}$

''.join(...)以获取字符串:

In [6]: ''.join(row.select('td[3]//text()').extract())
Out[6]: u' \r\n   yet some text  \r\n     '

相关问题 更多 >