Python基础入门之网络爬虫利器:lxml详解

这篇具有很好参考价值的文章主要介绍了Python基础入门之网络爬虫利器:lxml详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导语:网络爬虫是数据采集和信息提取的重要工具之一。在Python中,lxml库是一款功能强大且高效的网络爬虫工具,具有解析HTML和XML文档、XPath定位、数据提取等功能。本文将详细介绍lxml库的使用方法,并提供相应的代码示例。

获取更多爬虫相关资源公众号:每日推荐系列!

lxml库
lxml是一个HTML/XML的解析器,主要的功能是解析和提取HTML/XML数据

lxml和正则一样,也是用C语言实现的,是一款高性能的Python HTML/XML解析器,我们可以i利用之前学习的XPath语法,来快速的定位元素及节点信息。

lxml python官方文档:http://lxml.de/index.html

lxml,Python爬虫,python,爬虫,开发语言,算法
 

lxml

  • lxml这个框架用于对xml文件进行格式化(说明:html文件是一种特殊xml)
  • 安装:pip install lxml
  • etree 全称是element tree这个工具用把一个html文件格式化成一个树形型结构,这个树形结构叫做节点树
    html测试页面
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>测试页面</title>
</head>
<body>
	<ol>
		<li class="haha">醉卧沙场君莫笑,古来征战几人回</li>
		<li class="heihei">两岸猿声啼不住,轻舟已过万重山</li>
		<li id="hehe" class="nene">一骑红尘妃子笑,无人知是荔枝来</li>
		<li class="xixi">停车坐爱枫林晚,霜叶红于二月花</li>
		<li class="lala ">商女不知亡国恨,隔江犹唱后庭花</li>
	</ol>
	<div id="pp">
		<div>
			<a href="http://www.baidu.com">李白</a>
		</div>
		<ol>
			<li class="huanghe">君不见黄河之水天上来,奔流到海不复回</li>
			<li id="tata" class="hehe">李白乘舟将欲行,忽闻岸上踏歌声</li>
			<li class="tanshui kkk">桃花潭水深千尺,不及汪伦送我情</li>
		</ol>
		<div class="hh">
			<a href="http://mi.com">雷军</a>
		</div>
		<ol>
			<li class="dudu">are you ok</li>
			<li class="meme">Eric,会点编程</li>
		</ol>
	</div>
</body>
</html>

1,安装lxml库:

在开始之前,确保已经安装了Python和pip工具。使用pip命令可以简单地安装lxml库:

2,导入lxml库:

3,解析HTML文档:

lxml可以解析HTML文档,并提供了多种解析器。下面是一个简单的示例,演示如何使用lxml解析HTML文档:

html = """
<html>
<head>
  <title>网页标题</title>
</head>
<body>
  <h1>欢迎使用lxml</h1>
  <p>这是一个示例文档</p>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 获取标题
title = tree.findtext('.//title')
print(title)  # 输出:网页标题

# 获取<h1>标签下的文本
h1_text = tree.findtext('.//h1')
print(h1_text)  # 输出:欢迎使用lxml

# 获取<p>标签下的文本
p_text = tree.findtext('.//p')
print(p_text)  # 输出:这是一个示例文档

4,深度解析XML文档:

除了HTML文档,lxml还可以解析XML文档。下面是一个简单的示例,演示如何使用lxml解析XML文档:

xml = """
<root>
  <element attribute="value">文本内容</element>
</root>
"""

# 创建解析器
parser = ET.XMLParser()
tree = ET.fromstring(xml, parser)

# 获取属性值
attribute_value = tree.find('.//element').get('attribute')
print(attribute_value)  # 输出:value

# 获取文本内容
element_text = tree.findtext('.//element')
print(element_text)  # 输出:文本内容

5,XPath定位元素:

lxml支持使用XPath表达式定位元素,这使得数据提取更加方便。下面是一个示例,演示如何使用XPath定位元素:

html = """
<html>
<body>
  <ul>
    <li>苹果</li>
    <li>香蕉</li>
    <li>橙子</li>
  </ul>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 使用XPath获取<ul>下的所有<li>元素
li_elements = tree.findall('.//ul/li')
for li in li_elements:
    print(li.text)  # 输出:苹果、香蕉、橙子

6,属性选择器:

在XPath中,可以使用属性选择器来定位具有特定属性的元素。下面是一个示例,演示如何使用属性选择器:

 
html = """
<html>
<body>
  <ul>
    <li class="fruit">苹果</li>
    <li class="fruit">香蕉</li>
    <li class="vegetable">西红柿</li>
  </ul>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 使用属性选择器获取class为"fruit"的<li>元素
fruit_elements = tree.findall('.//ul/li[@class="fruit"]')
for fruit in fruit_elements:
    print(fruit.text)  # 输出:苹果、香蕉

7,CSS选择器:

除了XPath,lxml还支持使用CSS选择器来定位元素。下面是一个示例,演示如何使用CSS选择器:

html = """
<html>
<body>
  <ul>
    <li class="fruit">苹果</li>
    <li class="fruit">香蕉</li>
    <li class="vegetable">西红柿</li>
  </ul>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 使用CSS选择器获取class为"fruit"的<li>元素
fruit_elements = tree.cssselect('ul li.fruit')
for fruit in fruit_elements:
    print(fruit.text)  # 输出:苹果、香蕉

8,数据提取:

lxml可以方便地提取元素中的数据。下面是一个示例,演示如何提取数据:

html = """
<html>
<body>
  <ul>
    <li class="fruit">苹果</li>
    <li class="fruit">香蕉</li>
    <li class="vegetable">西红柿</li>
  </ul>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 使用XPath提取<li>元素中的文本内容
li_elements = tree.findall('.//ul/li')
fruits = [li.text for li in li_elements]
print(fruits)  # 输出:['苹果', '香蕉', '西红柿']

9,修改元素:

lxml不仅可以解析和提取数据,还可以修改元素。下面是一个示例,演示如何修改元素:

html = """
<html>
<body>
  <h1>旧标题</h1>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 修改<h1>元素的文本内容
h1_element = tree.find('.//h1')
h1_element.text = '新标题'

# 将修改后的文档输出为字符串
new_html = ET.tostring(tree, encoding='unicode')
print(new_html)
# 输出:
# <html>
# <body>
#   <h1>新标题</h1>
# </body>
# </html>

10,删除元素:

除了修改元素,lxml还可以删除元素。下面是一个示例,演示如何删除元素:

html = """
<html>
<body>
  <ul>
    <li>苹果</li>
    <li>香蕉</li>
    <li>橙子</li>
  </ul>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()
tree = ET.fromstring(html, parser)

# 删除第一个<li>元素
ul_element = tree.find('.//ul')
li_elements = ul_element.findall('.//li')
ul_element.remove(li_elements[0])

# 将修改后的文档输出为字符串
new_html = ET.tostring(tree, encoding='unicode')
print(new_html)
# 输出:
# <html>
# <body>
#   <ul>
#     <li>香蕉</li>
#     <li>橙子</li>
#   </ul>
# </body>
# </html>

11,处理命名空间:

当解析带有命名空间的XML文档时,可以使用lxml来处理命名空间。下面是一个示例,演示如何处理命名空间:

xml = """
<root xmlns:ns="http://example.com">
  <ns:element>文本内容</ns:element>
</root>
"""

# 创建解析器
parser = ET.XMLParser()
tree = ET.fromstring(xml, parser)

# 使用命名空间前缀获取元素
element = tree.find('.//ns:element', namespaces={'ns': 'http://example.com'})
print(element.text)  # 输出:文本内容

12,解析大型文档:

lxml对于大型文档的解析和处理非常高效。可以使用iterparse方法来迭代解析大型文档,从而减少内存占用。下面是一个示例,演示如何解析大型文档:

xml = """
<root>
  <element>元素1</element>
  <element>元素2</element>
  <element>元素3</element>
  ...
  <element>元素N</element>
</root>
"""

# 创建解析器
parser = ET.iterparse(xml)

# 迭代解析元素
for _, element in parser:
    if element.tag == 'element':
        print(element.text)
        element.clear()

13,错误处理:

在使用lxml解析文档时,可能会遇到一些错误。可以通过捕获异常并进行错误处理来提高代码的健壮性。下面是一个示例,演示如何处理错误:

html = """
<html>
<body>
  <h1>标题</h1>
  <p>文本1</p>
  <p>文本2</p>
  <p>文本3</p>
</body>
</html>
"""

# 创建解析器
parser = ET.HTMLParser()

try:
    tree = ET.fromstring(html, parser)
    # 在此处进行数据提取等操作
except ET.ParseError:
    print("解析出错")

14,lxml和xpath结合使用详解:

from lxml import etree
# 1. 获取所有tr标签
# 2. 获取2个tr标签
# 3. 获取所有class等于even的标签
# 4. 获取所有a标签的href属性
# 5. 获取所有的职位信息(纯文本)
 
parser=etree.HTMLParser(encoding='utf-8')
html=etree.parse('tencent.html',parser=parser)
 
# 1. 获取所有tr标签
# //tr
trs=html.xpath("//tr")
for tr in trs:
    print(etree.tostring(tr,encoding='utf-8').decode('utf-8'))
 
# 2. 获取第2个tr标签
trs=html.xpath("//tr[2]")
print(trs)
''''''
# 3. 获取所有class等于even的标签
trs=html.xpath("//tr[@class='even']")
for tr in trs:
    print(etree.tostring(tr,encoding='utf-8').decode('utf-8'))
 
# 4. 获取所有a标签的href属性
trs=html.xpath("//a/@href")
for tr in trs:
    print(tr)
 
# 5. 获取所有的职位信息(纯文本)
trs=html.xpath("//tr[position()>1]")
for tr in trs:
    #在某个标签下执行哦xpath()获取元素,注意加.表明在当前标签下获取
    href=tr.xpath(".//a/@href")[0]
    fullurl='http://hr.tencent.com'+ href
    title=tr.path("./td[1]/text()")[0]
    category=tr.path("./td[2]/text()")[0]
    nums = tr.path("./td[3]/text()")[0]
    address = tr.path("./td[4]/text()")[0]
    pubtime = tr.path("./td[5]/text()")[0]
    position={
        'url': fullurl,
        'title': title,
        'category': category,
        'nums':nums,
        'address': address,
        'pubtime': pubtime
    }

总结:

本文详细介绍了lxml库的使用方法,包括解析HTML和XML文档、XPath定位、数据提取、元素修改和删除、处理命名空间、解析大型文档等。lxml是一款功能强大且高效的网络爬虫工具,可以帮助你轻松地进行数据采集和信息提取。希望本文对你理解和应用lxml有所帮助!文章来源地址https://www.toymoban.com/news/detail-723175.html

注意:本文代码示例仅作为参考,实际应用时请根据具体需求进行修改和优化。祝你在网络爬虫的道路上取得成功!

到了这里,关于Python基础入门之网络爬虫利器:lxml详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python从入门到网络爬虫(控制语句详解)

    做任何事情都要遵循一定的原则。例如,到图书馆去借书,就需要有借书证,并且借书证不能过期,这两个条件缺一不可。程序设计亦是如此,需要使用流程控制实现与用户的交流,并根据用户需求决定程序“做什么”“怎么做\\\"。 Python的流程控制语句主要可以分为以下几类

    2024年02月02日
    浏览(35)
  • Python从入门到网络爬虫(读写Excel详解)

    Python操作Excel的模块有很多,并且各有优劣,不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas,下面是各个模块的支持情况: 工具名称 .xls .xlsx 获取文件内容 写入数据 修改文件内容 保存 样式调整 插入图片 xlrd √ √ √

    2024年01月22日
    浏览(45)
  • 014集:python访问互联网:网络爬虫实例—python基础入门实例

    以pycharm环境为例: 首先需要安装各种库(urllib:requests:Openssl-python等) python爬虫中需要用到的库,大致可分为:1、实现 HTTP 请求操作的请求库;2、从网页中提取信息的解析库;3、Python与数据库交互的存储库;4、爬虫框架;5、Web框架库。 一、请求库 实现 HTTP 请求操作 1、

    2024年01月16日
    浏览(51)
  • Python网络爬虫库:轻松提取网页数据的利器

          网络爬虫是一种自动化程序,它可以通过访问网页并提取所需的数据。Python是一种流行的编程语言,拥有许多强大的网络爬虫库。在本文中,我们将介绍几个常用的Python网络爬虫库以及它们的使用。 Requests库 Requests是一个简单而优雅的HTTP库,可以轻松地发送HTTP请求。

    2024年02月09日
    浏览(49)
  • Python爬虫技术系列-02HTML解析-xpath与lxml

    参考连接: XPath教程 https://www.w3school.com.cn/xpath/index.asp lxml文档 https://lxml.de/index.html#support-the-project 爬虫专栏 https://blog.csdn.net/m0_38139250/category_12001010.html XPath的中文名称为XML路径语言(XML Path Language),其最初的设计是用来搜索 XML 文档,但也适用于HTML文档搜索。1996年11月,

    2024年02月07日
    浏览(45)
  • python教程lxml详解

    lxml是一个用于Python的XML和HTML处理库,它提供了高效、灵活和易于使用的API,用于解析、操作和生成XML和HTML文档。lxml基于libxml2和libxslt C库,因此在处理大型XML和HTML文档时,它具有优异的性能。 以下是关于lxml的一些详解: 解析XML和HTML文档:lxml提供了两种主要的解析器,分

    2024年02月04日
    浏览(41)
  • Python异步网络编程利器——详解aiohttp的使用教程

    在现代Web应用程序开发中,网络请求是非常常见的操作。然而,传统的同步网络请求方式在处理大量请求时会导致性能瓶颈。为了解决这个问题,Python提供了aiohttp库,它是一个基于异步IO的网络请求库,可以实现高效的并发网络请求。本文将详细介绍aiohttp的各种使用方法,帮

    2024年02月06日
    浏览(52)
  • Python XML处理初级篇:入门lxml库

    在数据处理过程中,XML(可扩展标记语言)常常被用作数据存储和传输。Python的lxml库是一个强大的库,用于解析XML和HTML文档。本文将向您介绍如何使用lxml库来解析和处理XML文档。 在开始使用lxml库之前,我们需要先在我们的Python环境中安装它。我们可以通过以下命令来安装

    2024年02月12日
    浏览(41)
  • 超实用的 Python 库之lxml使用详解

    XML(可扩展标记语言)和HTML(超文本标记语言)是广泛用于数据交换和网页构建的标记语言。在Python中,有许多库可以用来解析和处理XML和HTML文档,其中最强大和常用的之一是lxml。lxml是一个高性能、功能丰富的库,它提供了强大的XML和HTML处理功能。本文将深入介绍Python

    2024年02月03日
    浏览(42)
  • Python网络爬虫入门到实战

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 网络爬虫(Web Scraping)是一种自动化从网页上获取信息的技术,它通过模拟浏览器

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包