为了visa面签预约学习python爬虫-DAY3

1.学习了两个用于数据解析的库

`BS4`(Beautiful Soup 4)和`lxml`的`etree`模块是两个常用于网页内容抓取和解析的Python库,它们各自拥有独特的特点和优势。

### BS4(Beautiful Soup 4)

- **简介**:Beautiful Soup是一个用于从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器(如`lxml`和`html5lib`)来解析这些文件,提供了一种简便的方式来对网页文档进行遍历、搜索和修改。
- **优点**:
  - **用户友好**:Beautiful Soup的API设计非常人性化,对初学者友好。
  - **灵活性**:它支持多种解析器,如`lxml`和`html.parser`,可以根据需要选择。
  - **容错性**:Beautiful Soup能够处理非常杂乱的HTML代码,并能从中提取出有用的信息。
- **用途**:主要用于网页数据抓取、数据挖掘等领域,特别适合处理不规则或者嵌套的HTML文档。

### lxml的etree模块

- **简介**:`lxml`是一个非常高性能的Python库,用于处理XML和HTML文档,其`etree`模块尤其强大,基于C语言编写。
- **优点**:
  - **性能高**:`lxml`的性能非常高,特别是在处理大型文件时,其解析速度和效率远高于Beautiful Soup。
  - **XPath和XSLT支持**:`lxml`提供了对XPath查询的原生支持,使得用户可以使用XPath来进行复杂的查询和数据抓取,还支持XSLT的转换。
  - **全面**:它提供了全面的XML支持,包括但不限于DTD验证、Xpath选择器等高级功能。
- **用途**:同样适用于网页数据抓取和处理,特别是当处理需要高性能处理或复杂XML文档时,`lxml`的`etree`模块是一个更好的选择。

### 选择依据

选择使用BS4还是lxml的`etree`,很大程度上取决于你的具体需求:
- 如果你需要处理的HTML文档非常杂乱,或者你更倾向于使用一个更加简单直观的API,那么Beautiful Soup可能是更好的选择。
- 如果你需要处理的是大型文件,或者需要利用XPath进行复杂的文档查询,那么`lxml`的`etree`模块可能更适合你。

在实际应用中,你也可以将它们结合起来使用,例如,使用`lxml`作为Beautiful Soup的解析器,结合二者的优势。

XPath(XML Path Language)是一种在XML文档中查找信息的语言。它被设计用来允许对XML文档的结构化遍历和指向特定部分,包括元素和属性的定位。XPath不仅仅限于XML,它同样适用于HTML文档,因为HTML可以被视为特殊的XML。XPath通过定义路径表达式来选择XML文档中的节点或节点集,这些路径表达式非常类似于文件系统中的路径地址。

### XPath的主要特点:

- **强大的选择功能**:XPath允许从XML文档的完整结构中选择元素、属性、文本等。
- **简洁的语法**:XPath使用简洁的路径表达式来选取XML文档中的节点或节点集。
- **多功能的查询能力**:它支持在选择节点时使用逻辑、算术运算符和函数。
- **广泛的应用**:XPath被广泛应用于XML解析、XSLT(XML样式表转换语言)转换和其他XML相关技术中。

### XPath的应用场景:

- **XML文档解析和处理**:在XML相关应用中,如XML数据处理、配置文件处理等。
- **Web数据抓取**:在使用Python进行网页数据抓取时,尤其是结合`lxml`库,XPath可以用来精确地定位和抓取网页中的数据。
- **在XSLT中定位特定数据**:在XSLT中,XPath被用来匹配和选择需要转换的XML文档的部分。

### 与CSS选择器的比较:

- **XPath**:提供了更加复杂和强大的选择功能,能够进行条件选择、轴选择等高级查询。
- **CSS选择器**:在Web开发中更为常用,语法更简单直观,适合进行简单的元素选择操作。

总的来说,XPath是一个功能强大、用途广泛的技术,尤其在需要进行精确的XML/HTML数据选择和处理时发挥重要作用。

我算是看出来了,因为bs4是直接python的库,基本上直接用python的语法调用对应的 api,而etree基于C语言编写,使用的时候调api并要传入对应的表达式。

2.两个库使用的基本步骤都差不多:环境的安装、对象实例化(可以从本地的文件加载,也可以从网络上获取的源码数据加载)、定位标签、获取文本数据、获取属性值

下面是GPT给的两个DEMO

#使用BeautifulSoup解析HTML
from bs4 import BeautifulSoup

# 假设这是我们的HTML文档
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
</body>
</html>
"""

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_doc, 'html.parser')

# 定位到第一个<a>标签
tag_a = soup.find('a')

# 获取<a>标签的文本内容
text = tag_a.text

# 获取<a>标签的href属性
href = tag_a['href']

print(f"标签文本: {text}")
print(f"href属性: {href}")
#使用lxml的etree模块解析HTML

from lxml import etree

# 假设这是我们的HTML文档
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
</body>
</html>
"""

# 解析HTML
tree = etree.HTML(html_doc)

# 使用XPath定位到第一个<a>标签
tag_a = tree.xpath('//a')[0]

# 获取<a>标签的文本内容
text = tag_a.text

# 获取<a>标签的href属性
href = tag_a.get('href')

print(f"标签文本: {text}")
print(f"href属性: {href}")

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值