欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 爬虫基本库的使用之使用urllib

爬虫基本库的使用之使用urllib

2024/10/25 5:20:16 来源:https://blog.csdn.net/RHeng/article/details/140707466  浏览:    关键词:爬虫基本库的使用之使用urllib

在Python的爬虫开发领域,urllib是一个非常重要的基础库。它提供了丰富的接口来发送HTTP请求并处理响应,非常适合初学者以及需要快速实现HTTP请求的开发者。本文将详细介绍如何使用urllib库进行基本的网络爬虫开发。

1、urllib库简介

urllib是Python标准库中用于处理URL的模块集合,包含多个模块,如urllib.request、urllib.parse、urllib.error等。其中,urllib.request用于发送HTTP请求,urllib.parse用于解析URL,urllib.error用于处理请求过程中出现的异常。

import urllib.request  # 目标URL  
url = 'http://example.com'  # 发送GET请求  
response = urllib.request.urlopen(url)  # 读取响应内容  
html = response.read().decode('utf-8')  # 打印响应内容  
print(html)  # 关闭响应对象  
response.close() # 目标URL  
url = 'http://example.com'  # 发送GET请求  
response = urllib.request.urlopen(url)  # 读取响应内容  
html = response.read().decode('utf-8')  # 打印响应内容  
print(html)  # 关闭响应对象  
response.close()
发送POST请求
python
import urllib.request  
import urllib.parse  # 目标URL  
url = 'http://example.com/login'  # POST数据  
data = {  'username': 'your_username',  'password': 'your_password'  
}  # 将数据编码为字节串  
data = urllib.parse.urlencode(data).encode('utf-8')  # 创建一个请求对象  
request = urllib.request.Request(url, data=data, method='POST')  # 添加请求头  
request.add_header('Content-Type', 'application/x-www-form-urlencoded')  # 发送请求  
response = urllib.request.urlopen(request)  # 读取响应内容  
html = response.read().decode('utf-8')  # 打印响应内容  
print(html)  # 关闭响应对象  
response.close()

2、处理异常

在发送HTTP请求时,可能会遇到各种网络问题或服务器错误,因此使用try…except语句来捕获并处理异常是非常必要的。

from urllib.request import urlopen  
from urllib.error import URLError, HTTPError  try:  url = 'http://example.com'  response = urlopen(url)  html = response.read().decode('utf-8')  print(html)  
except HTTPError as e:  print('HTTP Error:', e.code, e.reason)  
except URLError as e:  print('URL Error:', e.reason)  
finally:  if 'response' in locals():  response.close()
使用urllib.parse解析URL

3.解析链接

3.1urlparse 与 urlsplit

urlparse 和 urlsplit 函数用于将URL分解为不同的组件。它们的主要区别在于urlparse会将查询参数(query string)进一步分割为字典,而urlsplit则将其视为一个整体字符串。

from urllib.parse import urlparse, urlsplit  url = 'http://www.example.com:80/path?query=string#fragment'  
parsed_url = urlparse(url)  
split_url = urlsplit(url)  print(parsed_url)  
print(split_url)

3.2 urlunparse 与 urlunsplit

这两个函数是urlparse和urlsplit的逆操作,用于将URL的各个组件重新组合成一个完整的URL字符串。

from urllib.parse import urlunparse, urlunsplit  # 假设已有解析后的组件  
components = ('http', 'www.example.com', '/path', '', 'query=string', 'fragment')  
reconstructed_url = urlunparse(components)  # 对于urlsplit,需要省略查询参数的字典形式  split_components = ('http', 'www.example.com', '/path', 'query=string', 'fragment')  
reconstructed_split_url = urlunsplit(split_components)  print(reconstructed_url)  
print(reconstructed_split_url)

3.3 urljoin

urljoin函数用于将基本URL(base URL)和另一个URL(通常是相对路径)合并成一个完整的URL。

from urllib.parse import urljoin  base_url = 'http://www.example.com/path'  
relative_url = 'newpath/file.html'  
full_url = urljoin(base_url, relative_url)  print(full_url)  # 输出: http://www.example.com/newpath/file.html

3.4 urlencode

urlencode函数用于将字典或包含两个元素的元组(键和值)的列表转换为经过URL编码的查询字符串。

from urllib.parse import urlencode  params = {'query': 'string', 'limit': 10}  
encoded_params = urlencode(params)  print(encoded_params)  # 输出: query=string&limit=10

3.5 parse_qs 与 parse_qsl

这两个函数用于解析查询字符串(query string),将其转换为Python数据结构。parse_qs返回字典,其中键是查询参数的名字,值是参数值的列表(因为可能有多个相同的参数名);而parse_qsl返回的是查询参数名和值组成的元组列表。

from urllib.parse import parse_qs, parse_qsl  query_string = 'query=string&limit=10&limit=20'  
parsed_qs = parse_qs(query_string)  
parsed_qsl = parse_qsl(query_string)  print(parsed_qs)  # 输出: {'query': ['string'], 'limit': ['10', '20']}  
print(parsed_qsl)  # 输出: [('query', 'string'), ('limit', '10'), ('limit', '20')]

3.6 quote 与 unquote

quote函数用于对URL中的非ASCII字符和某些特殊字符进行百分比编码(percent-encoding),而unquote则用于对百分比编码的字符串进行解码。

from urllib.parse import quote, unquote  encoded_string = quote('Hello, 世界!')  
decoded_string = unquote(encoded_string)  print(encoded_string)  # 输出类似: Hello%2C%20%E4%B8%96%E7%95%8C%21  
print(decoded_string)  # 输出: Hello, 世界!

urllib是Python中处理HTTP请求和URL解析的强大工具。通过urllib.request,我们可以轻松发送GET和POST请求,并处理响应;通过urllib.parse,我们可以解析、组合和编码URL。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com