Extra characters Extracted with XPath and Python (html)
我一直在使用xpath和scrappy在线从HTML标记中提取文本,但当我这样做时,会附加额外的字符。一个例子是试图从
标签中提取一个数字,比如"204",然后得到[u'204']。在某些情况下,情况更糟。例如,尝试提取"1-MathOverflow",而不是获取[u'
\t\t 1 \u2013 MathOverflow
\t\t '] 。有没有一种方法可以防止这种情况发生,或者修剪字符串以使多余的字符不属于字符串的一部分?(使用项存储数据)。看起来它与格式化有关系,那么如何让xpath不接受这些内容呢?
- 如果您能够提供一个完整的、自包含的代码示例来重现您的问题,这将有很大的帮助。我们正试图猜测你在做什么。
标准的xpath函数normalize-space()正好达到了预期的效果。 它删除前导和尾随的wite空间,并仅用一个空间替换任何内部空白。 因此,您可以使用: 埃多克斯1〔2〕
- 啊,好吧,那上面的语法如何?('normalize-space(//div[@id="content"]/div[@id="directory li‌&8203;st"]/div[@class="wra‌&8203;pper"]/table')items=[])是否正确?
- @纳卡里:这是一个正确的xpath表达式:normalize-space(//div[@id="content"]/div[@id="directory-list"]/div[@class="wrapper"]/table)。
返回[u'204']的代码行是什么样子的?看起来返回的是一个包含您想要的值的Unicode字符串的python列表。没有什么——只是下标。至于回车、换行和制表,正如魏义东刚回答的,纸条会把它们拿出来。 可能
1
| my_answer = item1['Title'][0].strip() |
号 或者如果你期待几场比赛
1 2
| for ans_i in item1['Title']:
do_something_with( ans_i.strip() ) |
- 好的,谢谢,那把它修好了一点,它看起来像是拿起了1 - MathOverflow中的破折号,作为一个奇数字符串\u 2013,而ascii无法读取它。至于[U'204'],我不知道为什么xpath要把它放在数据周围。xpath语句是//div[@id="content"]/div[@id="directory-list"]/div[@class="wrapper"]/table/tr[@class="odd"][1]/td[1]/text()。
- 我认为您混淆了当Python在提示下打印它时,返回的实际内容是如何呈现的。当您在屏幕上看到[u'204']时,这不是以[字符开头的字符串。相反,这是Python告诉您它正在向您显示一个包含单个Unicode字符串的列表对象的方式。该unicode字符串中的值是三个字符2、0和4。这正是你想要的。我给你看的代码应该帮你解包。
- 同样,python不会用字符串\u2013替换破折号。相反,它只是向您显示返回的Unicode字符串包含代码点2013处的字符。希望你不会感到惊讶,这是"en-dash"的代码点,python不会改变字符串,它会返回浏览器中的内容。如果您想删除非ASCII字符,这个最近的线程将有助于:stackoverflow.com/questions/2854230/…
- 啊,我只是想把这些东西放到一个csv文档中,但有问题。
使用strip()删除前导空格和尾随空格。
1 2 3 4 5 6
| >>> u'
\t\t 1 \u2013 MathOverflow
\t\t '.strip()
u'1 \u2013 MathOverflow' |
- 我该如何在程序中做到这一点?我能写一封信吗?我是Python的新手。
- 是的,假设item1[‘title’]是一个字符串。
|