0

我正在尝试解析一个网站

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') 不太好用。有人对该怎么做有任何建议吗?

谢谢!

4

4 回答 4

0

不了解 LXML,但您绝对可以使用 BeautifulSoup,<a>在页面上查找所有内容,然后创建一个 for 循环,您将在其中检查是否<a href=...>与您的正则表达式模式匹配,如果匹配,而不是废弃 url。

于 2013-02-12T19:25:37.407 回答
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

您可以改用

于 2013-02-12T19:39:02.520 回答
0

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

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

一种选择是使用正则表达式来查找您想要的文本。但实际上,既然这是完全有效的 XML/HTML,为什么还要删除一些空格呢?

于 2013-02-12T20:41:37.817 回答
0

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

etree.tostring(node)

供进一步参考: http: //lxml.de/tutorial.html#elements-carry-attributes-as-a-dict

于 2013-02-14T12:28:03.940 回答