当前位置:  开发笔记 > 编程语言 > 正文

需要python lxml语法帮助解析html

如何解决《需要pythonlxml语法帮助解析html》经验,为你挑选了2个好方法。

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

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

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

        self.mySearchTables = self.mySearchTree.findall(".//table")
        self.myResultRows = self.mySearchTables[1].findall(".//tr")
    

    我需要找到此表中包含的链接(这是我遇到的问题):

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

    它似乎没有真正找到链接元素.

    我需要链接的纯文本.我想searchLink.text如果我真的得到了链接元素就好了.

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



1> Van Gale..:

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

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

其次,.find().findall()从LXML试图与ElementTree的兼容进来,并且这两种方法中所描述的XPath支持的ElementTree.

这两个函数相当容易使用,但它们的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'))



2> zweiterlinde..:

您是否有理由不在此项目中使用Beautiful Soup?它将使处理不完美形成的文档变得更加容易.


BeautifulSoup是(a)未维护,(b)慢于lxml,(c)比lxml强.
我最初使用的是BeautifulSoup,但它并没有处理坏的HTML以及它声称的.它也不支持具有多个类的项目等.对于我用它完成的所有事情,lxml.html更好.
我从美丽的汤开始,但我没有运气.我在我的问题中提到我的文档格式相当完整,但它缺少结束体块.当我将其拉入解析器时,它会丢弃所有内容.因此lxml.此外,http://tinyurl.com/37u9gu表示更好的mem mgmt与lxml
@BeauMartínez:我知道这篇文章已经有一年了,但只是为了让用户知情:BS*目前正在维护; 最近甚至有一个新版本.并且它在内部使用lxml,具体取决于您使用的构造函数参数.
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有