使用XPath和Python提取额外字符(html)

0 投票
3 回答
2982 浏览
提问于 2025-04-15 23:10

我一直在用XPath和scrapy从网上的HTML标签中提取文本,但每次提取的时候总是会多出一些额外的字符。比如,我想从一个<td>标签中提取数字“204”,结果得到的是[u'204']。有时候情况更糟,比如我想提取“1 - Mathoverflow”,结果却得到了[u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t ']。有没有办法避免这种情况,或者把字符串修剪一下,让多余的字符不再是字符串的一部分?(我用items来存储数据)。看起来这和格式有关,那我该怎么让XPath不把那些东西也提取出来呢?

3 个回答

1

使用strip()函数可以去掉字符串开头和结尾的空格。

>>> u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t '.strip()
u'1 \u2013 MathOverflow'
2

标准的XPath函数 normalize-space() 正好能达到你想要的效果。

这个函数会去掉字符串开头和结尾的空格,并把中间的多个空格替换成一个空格。

所以,你可以使用:

normalize-space(someExpression)

2

这行代码返回的是什么样子呢?看起来返回的是一个包含你想要的值的Python列表,这个值是一个unicode字符串,内容是'204'。这没什么问题,只是用到了下标而已。至于换行符、行结束符和制表符,正如Wai Yip Tung刚才所说,使用strip方法可以把它们去掉。

可能是

my_answer = item1['Title'][0].strip()

或者如果你期待有多个匹配结果的话

for ans_i in item1['Title']:
    do_something_with( ans_i.strip() )

撰写回答