网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。本文主要介绍Python中使用lxml解析html网页。

1、lxml简介

lxml 是一种使用 Python 编写的库,可以迅速、灵活地处理 XML 和 HTML。

它支持 XML Path Language (XPath) 和 Extensible Stylesheet Language Transformation (XSLT),并且实现了常见的 ElementTree API,而且解析效率非常高。

lxml XML 工具包是 C 库 libxml2和libxslt的 Pythonic 绑定。它的独特之处在于它将这些库的速度和 XML 功能完整性与原生 Python API 的简单性结合在一起,大部分兼容但优于众所周知的 ElementTree API。

相关文档:

lxml

https://bugs.launchpad.net/lxml

https://github.com/lxml/lxml

2、lxml的安装

1)Windows上安装

pip3 install lxml

2)Linux上安装

yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
pip3 install lxml

3、获取元素标签的方法

1)使用xpath选择器的语法

对于 ElementTree,xpath 方法对文档(如果是绝对的)或根节点(如果是相对的)执行全局 XPath 查询。

参考文档:Python通过Lxml库解析网络爬虫抓取到的html

2)使用CSS选择器的语法

lxml中需要使用CSS选择器语法,需要安装cssselect

安装cssselect:

pip install cssselect

使用示例:

import lxml.html as lh
content='''\
<div class="ds-list">
    <b>1. </b> 
    C JAVA Python 
    <i>Python</i> 
    https://www.cjavapy.com
</div>'''
doc=lh.fromstring(content)
for div in doc.cssselect('div.ds-list'):
    print(div.text_content())

从文件中解析:

import lxml

root = lxml.html.parse(filename).getroot()

# 以防文件包含unicode字符
parser = lxml.html.HTMLParser(encoding='utf-8')
root = lxml.html.parse(filename, parser=parser).getroot()

# 使用CSS选择器获取匹配的元素
els = root.cssselect('div.shop-info div.info-name h2 a')
el_text = els[0].text
print(el_text)
el_href = els[0].attrib['href']
print(el_href)

推荐文档