繁体   English   中英

使用Python LXML XPath收集数据

[英]Scraping data with Python LXML XPath

我正在尝试解析一个网站

blahblahblah 
<a  href="THIS IS WHAT I WANT" title="NOT THIS">I DONT CARE ABOUT THIS EITHER</a>
blahblahblah 

(其中有很多,我希望它们都以某种标记形式出现)。 问题是“ a href”实际上有两个空格,而不仅仅是一个空格(有些“ a href”带有一个我不想检索的空格),所以使用tree.xpath('// a / @ href')不太有效。 有人对做什么有建议吗?

谢谢!

不了解LXML,但是您可以肯定地使用BeautifulSoup,在页面上找到所有<a> ,然后创建for循环,在该循环中,您将检查<a href=...>与您的正则表达式模式匹配。匹配,而不是报废网址。

此代码按预期工作:

from lxml import etree

file = "file:///path/to/file.html" # can be a http URL too
doc = etree.parse(file)

print doc.xpath('//a/@href')[0]

编辑:AFAIK不可能用lxml做你想做的事情。

您可以改用

“((有些是“ a href”,但有一个我不想检索的空格)”

我认为这意味着您只想定位a和href之间有多个空格的元素。 XML允许在标记名称和属性之间使用任意数量的空格(允许使用空格,制表符和换行符)。 在解析文本和创建文档树时,空白将被丢弃。 LXML和XPATH与文档树中的Node对象一起使用,而不是与构成该树的原始文本一起使用。

一种选择是使用正则表达式来查找所需的文本。 但是实际上,由于这是完全有效的XML / HTML,为什么还要麻烦删除一些空格?

使用xpath表达式查找所有节点,然后遍历所有这些节点以寻找匹配项,您可以使用以下命令获取该节点的字符串表示形式:

etree.tostring(node)

有关更多参考: http : //lxml.de/tutorial.html#elements-carry-attributes-as-a-dict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM