使用Python LXML-XPath抓取数据

使用Python LXML-XPath抓取数据,python,html-parsing,lxml,regex,Python,Html Parsing,Lxml,Regex,我正在尝试解析的网站 blahblahblah <a href="THIS IS WHAT I WANT" title="NOT THIS">I DONT CARE ABOUT THIS EITHER</a> blahblahblah blahblahblah 布拉布拉布拉赫 (其中有很多,我希望所有这些都以某种标记形式出现)。问题是“a href”实际上有两个空格,而不仅仅是一个(有些是“a href”,其中一个空格我不想检索),因此使用tree.xpath(

我正在尝试解析的网站

blahblahblah 
<a  href="THIS IS WHAT I WANT" title="NOT THIS">I DONT CARE ABOUT THIS EITHER</a>
blahblahblah 
blahblahblah
布拉布拉布拉赫
(其中有很多,我希望所有这些都以某种标记形式出现)。问题是“a href”实际上有两个空格,而不仅仅是一个(有些是“a href”,其中一个空格我不想检索),因此使用tree.xpath('//a/@href')不太管用。有人对该怎么做有什么建议吗


谢谢

我不知道LXML,但你肯定可以使用BeautifulSoup,在页面上找到所有
,然后创建一个for循环,在那里你将检查
是否匹配你的正则表达式模式,如果匹配,而不是废弃url。

此代码按预期工作:

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]
编辑:用
lxml
做你想做的事是不可能的

您可以使用a来代替。

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

我认为这意味着您只想定位a和href之间有多个空格的元素。XML允许标记名和属性之间有任意数量的空白(空格、制表符和新行都是允许的)。在解析文本和创建文档树时,将丢弃空白。LXML和XPATH正在处理文档树中的节点对象,而不是解析生成树的原始文本


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

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

etree.tostring(node)

作为进一步的参考:

我正在抓取的站点有一些链接,它们是带有一个空格的“参考”,以及带有两个空格的“参考”。我只想要有两个空格的链接。使用sputnik的代码只检索带一个空格的链接,而不是带两个空格的链接(如果它同时检索了两个空格,我可以在我这端进行更多的解析,但事实并非如此!)好的,您可以阅读页面,替换('a href','a spaceyref'),加载xml并使用xpath查找spaceyref。嗨,这可以用一个空格提取“a href”,但在a和href之间有两个空格的地方提取“a href”是行不通的。我只想要a和href之间有两个空格的链接。不,就像tdelaney说的,XML+Xpath不关心空格。我的脚本处理这两种情况,只需删除
[0]
(第一个元素)并添加另一个链接,它们都将显示出来。(但听起来不可靠超过1天)