[英]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.