`

python html parser库lxml的介绍和使用

 
阅读更多
使用由 Python 编写的 lxml 实现高性能 XML 解析 http://blog.csdn.net/yatere/article/details/6667043

用lxml解析HTMLhttp://www.cnblogs.com/descusr/archive/2012/06/20/2557075.html


分步遍历:比先遍历得到body的某个div,然后在使用这个div的内容做遍历基础,继续通过它往下遍历
def scanningHotArticle(url):
    print url
    request=requests.get(url)
    dom=soupparser.fromstring(request.content)
    body=dom[1]
    articleList=body.xpath("//div[@class='block untagged mb15 bs2']")
    for article in articleList:
        articleStr= etree.tostring(article)
        articleBody=soupparser.fromstring(articleStr)
        print len(articleBody.xpath("//div[@class='detail']"))

结构是body-*->div[class='block untagged mb15 bs2'],这个div下面又存在许多div,然后把这个div当作根节点,在继续xpath查找下面的元素。


python html parser库lxml的介绍和使用(快速入门)
http://blog.csdn.net/marising/article/details/5821090
lxm是python的一个html/xml解析并建立dom的库,lxml的特点是功能强大,性能也不错,xml包含了ElementTree ,html5lib ,beautfulsoup 等库,但是lxml也有自己相对应的库,所以,导致lxml比较复杂,初次使用者很难了解其关系。

1.  解析html并建立dom
>>> import lxml.etree as etree

>>> html = '<html><body id="1">abc<div>123</div>def<div>456</div>ghi</body></html>'
>>> dom = etree.fromstring(html)
>>> etree.tostring(dom)
'<html><body id="1">abc<div>123</div>def<div>456</div>ghi</body></html>'



如果用beautifulsoup的解析器,则
>>> import lxml.html.soupparser as soupparser
>>> dom = soupparser.fromstring(html)
>>> etree.tostring(dom)
'<html><body id="1">abc<div>123</div>def<div>456</div>ghi</body></html>'

但是我强烈建议使用soupparser,因为其处理不规范的html的能力比etree强太多。



2.  按照Dom访问Element
子元素长度
>>> len(dom)
1 


访问子元素:
>>> dom[0].tag
'body' 


循环访问:
>>> for child in dom:
...     print child.tag
... 
body 


查看节点索引
>>>body = dom[0]
>>> dom.index(body)
0 


字节点获取父节点
>>> body.getparent().tag
'html' 


访问所有子节点
>>> for ele in dom.iter():
...     print ele.tag
... 
html
body
div
div 

遍历和打印所有子节点:
>>> children = list(root)
>>> for child in root:
... print(child.tag) 


元素的兄弟或邻居节点是通过next和previous属性来访问的
The siblings (or neighbours) of an element are accessed as next and previous elements:
>>> root[0] is root[1].getprevious() # lxml.etree only! 
True 
>>> root[1] is root[0].getnext() # lxml.etree only! 
True


3. 访问节点属性
>>> body.get('id')
'1'

也可以这样
>>> attrs = body.attrib
>>> attrs.get('id')
'1'


带属性的元素
XML元素支持属性,可以用Element工厂方法直接创建。
>>> root = etree.Element("root", interesting="totally")
>>> etree.tostring(root)
b’<root interesting="totally"/>’


可以使用set和get方法访问这些属性
>>> print root.get("interesting")
totally
>>> root.set("interesting", "somewhat")
>>> print root.get("interesting")
somewhat


也可以使用attrib性质的字典接口
>>> attributes = root.attrib
>>> print(attributes["interesting"])
somewhat
>>> print(attributes.get("hello"))
None
>>> attributes["hello"] = "Guten Tag"
>>> print(attributes.get("hello"))
Guten Tag
>>> print(root.get("hello"))
Guten Tag



4. 访问Element的内容
>>> body.text
'abc'
>>> body.tail

text只是从本节点开始到第一个字节点结束;tail是从最后一个字节结束到本节点未知。

访问本节点所有文本信息
>>> body.xpath('text()')
['abc', 'def', 'ghi']



访问本节点和子节点所有文本信息
>>> body.xpath('//text()')
['abc', '123', 'def', '456', 'ghi']


貌似返回本文档中所有文字信息
body.text_content()返回本节点所有文本信息。

5.Xpath的支持
所有的div元素
>>> for ele in dom.xpath('//div'):
...     print ele.tag
... 
div
div 


id=“1”的元素

>>> dom.xpath('//*[@id="1"]')[0].tag
'body'



body下的第1个div
>>> dom.xpath('body/div[1]')[0].tag
'div'



参考:
lxml的官方文档:http://codespeak.net/lxml/
HtmlParser的性能:http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/
分享到:
评论

相关推荐

    Python爬虫库BeautifulSoup的介绍与简单使用实例

    一、介绍 BeautifulSoup库是灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页信息的提取。 Python常用解析库 解析器 使用方法 优势 劣势 Python标准库 ...

    python爬虫BeautifulSoup实战练习

    lxml第三方网页解析库,也可以使用python自带html.parser re正则表达式用于查找提取字符 matplotlib.pyplot用于绘图 numpy用于辅助绘图处理对应数据 中途问题注意:使用CSS选择器选择获取了元素路径,但是带入...

    Python网页解析器使用实例详解

     1、常见的python网页解析工具有:re正则匹配、python自带的html.parser模块、第三方库BeautifulSoup(重点学习)以及lxm库。  2、常见网页解析器分类  (1)模糊匹配 :re正则表达式即为字符串式的模糊匹配模式;...

    python学习day07.txt

    Day06回顾 1、多线程爬虫 1、多进程线程应用场景 1、多进程 :大量密集并行计算 ... 2、html.parser :一般 3、xml :快,文档容错能力强 3、常用方法 1、find_all() :列表 1、r_list = soup

    Python爬虫BS4库的解析器正确使用方法

    bs4库官方推荐我们使用的是lxml解析器,原因是它具有更高的效率,所以我们也将采用lxml解析器。 PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费

    pubmed_pa​​rser:用于PubMed开放访问XML子集和MEDLINE XML数据集的Python解析器

    它使用lxml库将该信息解析为Python字典,该字典可轻松用于研究,例如在文本挖掘和自然语言处理管道中。 有关可用的API和有关数据集的详细信息,请参阅我们的或以获取更多详细信息。 下面,我们列出了一些核心功能...

    constituent-parser-nl:使用 Alpino 的荷兰语成分解析器

    KAF 中的句子数量完全相同要求VUKafParserPy:KAF 文件的 Python 解析器( ) lxml:python中处理xml的库Alpino 解析器: : 安装将存储库克隆到您的本地机器,并将文件 core/alpino_parser.py 中的变量 ALPINO_HOME ...

    python-scripts:一些有用的python脚本

    habr_parser.py用于使用XPath(模块lxml )从Habr解析文章的脚本。 项目创建的。 lpucoznet_parser.py用于下载Linkin Park专辑的脚本。 minecraft_*.py有关Minecraft API的一些有趣的脚本。 music_rn

    Python Web Scraping Cookbook: Over 90 proven recipes to get you scraping with Py

    Untangle your web scraping complexities and access web data with ease using Python scripts Key FeaturesHands-on recipes to advance your web scraping skills to expert levelAddress complex and ...

    SDB-Generic-Parser:使用架构映射的通用解析器

    lxml-基于C库libxml2和libxslt的快速XML解析器OptionParser-用于解析命令行选项的灵活库psycopg2-用于postgresql的数据库连接器。 警告:还需要在路径中安装和配置Visual Studio 此外,需要两个XML文件。 一个是要...

    bac-parser:http的抓取脚本

    yum install python-lxml pyliblzma python-argparse 用法 首先,您需要获取将被解析的 HTML 页面。 您可以使用浏览器下载它们,也可以使用蜘蛛,任何适合您的都可以。 然后你可以解析它们。 基本用法 ./main.py ...

    Python中使用HTMLParser解析html实例

    前几天遇到一个问题,需要把网页中的一部分内容挑出来,于是找到了urllib和HTMLParser两个库.urllib可以将网页爬下来,然后交由HTMLParser解析,初次使用这个库,在查官方文档时也遇到了一些问题,在这里写下来与大家分享....

    Python常用爬虫代码总结方便查询

    soup = BeautifulSoup(&lt;a&gt;&lt;/p&gt;, html.parser) ### 只有起始标签的会自动补全,只有结束标签的会自动忽略 ### 结果为:&lt;a&gt;&lt;/a&gt; soup = BeautifulSoup(&lt;a&gt;&lt;/p&gt;, lxml) ### 结果为:&lt;html&gt;&lt;body&gt;&lt;a&gt;&lt;/a&gt;&lt...

    jne:一个用于检查 JNE 快递价格并跟踪您的空运提单代码的 Python 脚本

    一个 python 脚本,用于检查 JNE 快递的价格并使用您的空运提单代码跟踪您的包裹。 只需运行python jne.py ,你就会知道这件事是如何工作的。 首先,你需要一个api_key和用户名来使用这个东西,或者你想做一些...

    Justdail-scrapper:一个工作100%的Justdial抓取工具,只需输入网址,它就会从中提取业务信息

    提取电话号码提取名称提取地址提取等级提取rating_count安装画中画以在Python中安装以下软件包( ) Python请求,以发出请求并下载页面HTML内容( ) Python LXML,用于使用Xpath解析HTML树结构(在此处了解如何...

    使用python获取邮箱邮件的设置方法

    from email.parser import Parser from email.header import decode_header from email.utils import parseaddr from lxml import etree 然后进行链接 name_list = [] email = 'xxx@xx.com' password = 'xxxxxx' ...

    jusText:基于启发式的样板删除工具

    一些使用jusText的库: 当前(2020年1月)的一些替代方案: html2text 铭文 报纸 python可读性 fil丝 安装 确保您已安装Python 2.7 + / 3.4 +和pip ( Windows , Linux )。 简单运行: $ [sudo] pip install ...

    riteme.github.io:riteme的博客

    使用 Python 3 编写的不清真站点生成器。 参见左侧栏 。 需要的依赖: Python 3 (&gt;= 3.7) Python Markdown Pygments (用于提供代码高亮) css-html-js-minify (压缩 HTML 源码) Beautiful Soup 4 lxml sitegen.py ...

    technomarin-scraper:Technomarin scraper是用Python编写的脚本,可从https:technomarin.ru刮取并保存有关制造商及其商品的信息。

    Technomarin刮板Technomarin scraper是用Python编写的脚本,可从刮取并保存有关制造商及其商品的信息。要求python 3.x xml文件入门安装依赖项: pip install -r requirements运行脚本: python main.py选项-h, --...

    流仪表板:广播电台的广播时间表的GUI编辑器

    屏幕截图 本地构建和运行依存关系要运行Flow-dashboard,您将需要安装以下软件: Python 3 GTK + 3 适用于python 3的lxml 跑安装完上述依赖项后,只需执行以下操作: python3 ./src/main.py使用Docker构建和运行构建...

Global site tag (gtag.js) - Google Analytics