我是python的新手,我需要一些帮助来查找和使用lxml查找和迭代html标签的语法。以下是我正在处理的用例:

HTML文件格式很好(但并不完美)。屏幕上有多个表,一个包含一组搜索结果,另一个包含页眉和页脚。每个结果行都包含搜索结果详细信息的链接。

  1. 我需要找到包含搜索结果行的中间表(这是我能够弄清楚的):

        self.mySearchTables = self.mySearchTree.findall(".//table")
        self.myResultRows = self.mySearchTables[1].findall(".//tr")
    
  2. 我需要找到此表中包含的链接(这是我遇到的问题):

        for searchRow in self.myResultRows:
            searchLink = patentRow.findall(".//a")
    

    似乎没有找到链接元素。

  3. 我需要链接的纯文本。我想如果我实际上首先得到了链接元素,那就像 searchLink.text

  4. 最后,在lxml的实际API参考中,我无法找到有关find和findall调用的信息。我从谷歌上找到的一些代码中收集了这些内容。我是否遗漏了一些关于如何使用lxml有效地查找和迭代HTML标记的内容?

有帮助吗?

解决方案

好的,首先,关于解析HTML:如果你遵循zweiterlinde和S.Lott的建议至少使用包含lxml 的beautifulsoup。这样你就可以获得一个漂亮的xpath或css选择器接口的好处。

但是,我个人更喜欢Ian Bicking的 lxml中包含的HTML解析器

其次, .find() .findall()来自lxml,试图与ElementTree兼容,这两种方法在 ElementTree中的XPath支持

这两个函数相当容易使用,但它们的XPath非常有限。我建议尝试使用完整的lxml xpath()方法或者,如果您已熟悉CSS,请使用 cssselect()方法

以下是一些示例,其中HTML字符串解析如下:

from lxml.html import fromstring
mySearchTree = fromstring(your_input_string)

使用css选择器类,您的程序大致如下所示:

# Find all 'a' elements inside 'tr' table rows with css selector
for a in mySearchTree.cssselect('tr a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

使用xpath方法的等效方法是:

# Find all 'a' elements inside 'tr' table rows with xpath
for a in mySearchTree.xpath('.//tr/*/a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

其他提示

您是否有理由不在此项目中使用美丽的汤?它将使处理不完美的文档变得更加容易。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top