Python解析html网页,掌握这4种方法就够了

图灵学者 2024-08-31 11:05:02 阅读 81

目录

1、方法一:BeautifulSoup库 🍜

1.1 BeautifulSoup安装与导入

1.2 HTML文档解析基础

1.3 CSS选择器实战

1.4 数据提取与清洗技巧

2、方法二:lxml库 📄

2.1 lxml简介与安装

2.2 XPath语法入门

2.3 快速定位元素

2.4 页面结构分析实战

2.5 提高性能:迭代器与XPath优化

2.6 高效数据抽取策略

3、方法三:PyQuery库 🌐

3.1 PyQuery安装

3.2 类jQuery语法解析HTML

3.3 数据筛选与转换

3.4 数据提取与转换技巧

3.5 动态页面处理技巧

4、方法四:requests-HTML库 🌌

4.1 异步HTML解析新星

4.1 异步HTML解析新星

4.2 安装与初步使用

4.3 使用AsyncIO提升效率

4.4 使用Session

4.5 JavaScript渲染页面处理

4.6 数据抓取案例

5、综合运用与性能比较 🏎️

5.1 不同场景下的最佳选择

5.2 性能考量与选择依据

5.3 安全与合规性考虑

6、总结 🚀


1、方法一:BeautifulSoup库 🍜

1.1 BeautifulSoup安装与导入

BeautifulSoup 是 Python 中用于解析 HTML 和 XML 文档的库,以其灵活强大的选择器和简洁的API广受开发者喜爱。在Python中使用BeautifulSoup进行HTML解析之前,首先需要通过pip安装此库。如果你还没有安装 ,可以通过运行以下命令来进行安装:

<code>pipinstallbeautifulsoup4

同时,由于BeautifulSoup通常与requests库搭配使用来获取网页内容,因此建议也安装requests:

pipinstallrequests

导入这两个库的方式如下:

frombs4importBeautifulSoup

importrequests

1.2 HTML文档解析基础

BeautifulSoup能够将复杂的HTML文档转换为一个复杂的树形结构,每个节点都是Python对象。这使得我们可以轻松地遍历文档、搜索特定部分以及提取所需数据。例如,解析一个简单的HTML字符串:

url = 'https://blog.csdn.net/xyh2004/article/details/139481315'

headers = {

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'

}

response = requests.get(url=url,headers=headers)

html_doc = response.text

soup = BeautifulSoup(html_doc, 'html.parser')

print(soup.prettify())

1.3 CSS选择器实战

CSS选择器是一种强大的工具,用于定位和选取HTML中的元素。BeautifulSoup支持大多数CSS选择器。以下是如何使用它们的例子:

# 选取所有的段落元素

paragraphs = soup.select('.htmledit_views p')

for p in paragraphs:

print("选取所有的段落元素:",p.text)

# 选取具有特定类名的元素,默认寻找第一次出现的

title = soup.select_one('.title-article')

print("选取具有特定类名的元素:",title.text)

# 选取具有特定属性的元素

links = soup.select('a[href]')

for link in links:

print('选取具有特定属性的元素:',link['href'])

# 遍历所有的 `<a>` 标签

for link in soup.find_all('a'):

print("遍历所有的 `<a>` 标签",link.get('href'))

1.4 数据提取与清洗技巧

在提取数据后,可能需要进行一些清洗,去除多余的空白字符、标签等。BeautifulSoup提供了直接访问和修改文本的方法:

# 提取并清洗文本内容

story_paragraph = soup.find(class_='aside-box')code>

clean_text = story_paragraph.get_text(separator=' ', strip=True)code>

print("提取并清洗文本内容:",clean_text)

# 移除特定标签

for script in soup(['script', 'style']):

script.extract()

# 现在打印文档 ,会发现脚本和样式已被移除

print(soup.prettify())

以上展示了使用BeautifulSoup解析HTML文档的基本方法,包括安装、基础解析、CSS选择器的应用以及数据的提取与清洗技巧。掌握这些技能,你将能够有效地从网页中提取有价值的信息。

2、方法二:lxml库 📄

2.1 lxml简介与安装

lxml是一个高效且功能丰富的Python库,用于处理XML和HTML文档。它结合了C语言库libxml2和libxslt的强大功能,提供了XPath和XSLT的支持,使得解析和操作XML/HTML数据变得快速且简单。要安装lxml,只需在你的Python环境中运行:

<code>pipinstalllxml

2.2 XPath语法入门

XPath(XML Path Language)是一种在XML文档中查找信息的语言 ,同样适用于HTML。它允许你通过元素和属性来定位特定的节点。以下是几个基本的XPath表达式示例:

//title:选取文档中的所有<title>元素。

/html/body/p:选取根元素下<html>子元素内的<body>子元素 ,再选取其内的所有<p>元素。

//a[@href]:选取所有带有href属性的<a>元素。

//div[@class='content']/p[1]code>:选取所有class属性为content<div>元素内的第一个<p>元素。

例如,要选择所有带有div元素 ,可以使用:

from lxml import etree

html = """

<div >

<p>First paragraph.</p>

</div>

<div >

<p>Second paragraph.</p>

</div>

<div >

<p>I am main.</p>

</div>

"""

root = etree.HTML(html)

elements = root.xpath('//div[@]')

for element in elements:

print(etree.tostring(element))

输出:

b'<div >\n <p>First paragraph.</p>\n</div>\n'

b'<div >\n <p>Second paragraph.</p>\n</div>\n'



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。