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

时间:2010-05-25 22:47:14

标签: python html scrapy

我一直在使用带有scrapy的XPath来在线提取html标签中的文本,但是当我这样做时,我会附加额外的字符。一个示例是尝试从<td>标记中提取数字,例如“204”并获取[u'204']。在某些情况下,它更糟糕。例如,尝试提取“1 - Mathoverflow”而不是获取[u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t ']。有没有办法防止这种情况,或修剪字符串,以便额外的字符不是字符串的一部分? (使用项目来存储数据)。看起来它与格式化有关,所以如何让xpath不要拿起那些东西呢?

3 个答案:

答案 0 :(得分:2)

返回[u'204']的代码行是什么样的?看起来返回的是包含具有所需值的unicode字符串的Python列表。什么都没有 - 只是下标。关于回车,换行和标签,正如Wai Yip Tung刚刚回答的那样,strip会将它们拿出来。

可能

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

或者如果你期待几场比赛

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

答案 1 :(得分:2)

标准XPath函数normalize-space()具有完全想要的效果。

它删除了前导和尾随的空格,并用一个空格替换任何内部空格。

所以,你可以使用

normalize-space(someExpression)

答案 2 :(得分:1)

使用strip()删除前导和尾随空格。

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