使用XPath和Python提取额外字符(html)
我一直在用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() )