我正在尝试解析网站
blahblahblah
<a href="THIS IS WHAT I WANT" title="NOT THIS">I DONT CARE ABOUT THIS EITHER</a>
blahblahblah
(其中有很多,我希望所有这些都以一种标记化的形式)。问题是“a href”实际上有两个空格,而不仅仅是一个空格(有一些是“href”,有一个我不想检索的空格),所以使用tree.xpath('// a / @ href')不太有用。有没有人对如何做有任何建议?
谢谢!
答案 0 :(得分:0)
不了解LXML,但你绝对可以使用BeautifulSoup,在页面上找到所有<a>
,然后创建一个for循环,在那里你将检查<a href=...>
是否与你的正则表达式模式匹配,如果匹配,则为废弃网址。
答案 1 :(得分:0)
此代码按预期工作:
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
执行您想要的操作。
您可以使用regex代替。
答案 2 :(得分:0)
“(有一些是”href“,有一个我不想检索的空间)”
我认为这意味着你只想找到a和href之间有多个空格的元素。 XML允许标记名称和属性之间的任何数量的空格(空格,制表符,新行都是允许的)。在解析文本并创建文档树时,将丢弃空格。 LXML和XPATH正在使用Document树中的Node对象,而不是解析为生成树的原始文本。
一种选择是使用正则表达式来查找所需的文本。但实际上,由于这是完全有效的XML / HTML,为什么还要删除一些空格?
答案 3 :(得分:0)
使用xpath表达式查找所有节点,然后遍历查找匹配项的所有节点,您可以获取节点的字符串表示形式:
etree.tostring(node)
进一步参考:http://lxml.de/tutorial.html#elements-carry-attributes-as-a-dict