目录
一、什么是urllib库:
urllib是一个Python标准库,它包含了用于处理URL的模块,可以用来创建、打开、阅读和修改从互联网上获取的数据。该库包含了多个模块,包括urllib.request、urllib.parse、urllib.error、urllib.robotparser和urllib.response。它被广泛用于Web客户端编程、Web爬虫、测试、数据挖掘等领域,是Python中的一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,同时可以保存服务器返回的数据。在Python3的urllib库中,所有和网站请求相关的方法都被集中在’urllib.request’模块下,例如urlopen和urlretrieve函数。
1.在Python的urllib库中,除了urlopen和urlretrieve,还有一些其他的方法。以下是一些常用的方法:
- urlencode(): 对字典或列表进行编码,生成一个适合在URL中使用的字符串。
- urlparse(): 解析URL,返回一个解析后的命名元组(parsed-result)。
- urlunparse(): 将命名元组重新组装为URL。
- urljoin(): 合并基础URL和相对URL,返回一个新的URL。
- getproxies(): 返回当前系统使用的所有代理服务器的字典。
- proxy_support(): 提供对代理服务器的支持。
- url2pathname(): 将URL转换为文件系统路径。
- getdefaultproxy(): 返回当前系统默认的代理设置。
- setdefaultproxy(): 设置当前系统默认的代理设置。
- unquote(): 对给定的字符串进行解码,返回解码后的字符串。
- quote(): 对给定的字符串进行编码,返回编码后的字符串。
- parse_qs(): 对给定的字符串进行解析,返回一个字典。
- to_bytes(): 将给定的字符串转换为字节。
- to_unicode(): 将给定的字节转换为字符串。
- pathname2fileinfo(): 将文件系统路径转换为文件信息对象。
- fileinfo2pathname(): 将文件信息对象转换为文件系统路径。
- geturl():返回给定URL的原始URL。
- pathname2pathname():将文件系统路径转换为另一个文件系统路径。
- urlopen():打开给定的URL,并返回一个文件对象。
- urlretrieve():下载给定的URL的内容,并将其保存到本地文件系统中。
- 这些是urllib库中的一些常见方法,可以满足不同的网络请求和处理需求。
二、快速使用urllib库爬取网页
urllib 包 包含以下几个模块:
- urllib.request - 打开和读取 URL。
- urllib.error - 包含 urllib.request 抛出的异常。
- urllib.parse - 解析 URL。
- urllib.robotparser - 解析 robots.txt 文件。
以下是快速使用urllib库爬取网页的一些实例
1.爬取网页内容:
import urllib.request
#调用urllib.request库的方法urlopen方法,并传入一个url
response=
urllib.request.urlopen('http://www/baidu/com')
#使用read方法读取获取到网页内容
html=response.read().decode('UTF-8')
#打印网页内容
2.发送HTTP GET请求并获取响应结果:
import urllib.request
response = urllib.request.urlopen('http://www.example.com')
html = response.read().decode('utf-8')
print(html)
3.下载文件
import urllib.request
url = 'http://www.example.com/file.txt'
urllib.request.urlretrieve(url, 'file.txt')
4.发送HTTP请求并设置请求头
import urllib.request
url = 'http://www.example.com'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)
5.处理URL编码:
import urllib.parse
params = {'key': 'value', 'foo': 'bar'}
encoded_params = urllib.parse.urlencode(params)
print(encoded_params)
decoded_params = urllib.parse.parse_qs(encoded_params)
print(decoded_params)
三、使用urllib实现数据传输
可以使用urllib库来实现数据传输。
以下是一个使用urllib库发送POST请求的示例代码:
import urllib.request
import urllib.parse
url = 'http://example.com' # 设置要发送请求的URL
data = {'key1': 'value1', 'key2': 'value2'} # 设置要发送的数据,以字典的形式表示
# 对数据进行编码
encoded_data = urllib.parse.urlencode(data).encode('utf-8')
# 创建请求对象
request = urllib.request.Request(url=url, data=encoded_data, method='POST')
# 发送请求并获取响应
response = urllib.request.urlopen(request)
# 读取响应内容
result = response.read().decode('utf-8')
print(result)
tip:在上述代码中,首先需要设置要发送请求的URL和要发送的数据。然后使用urllib.parse.urlencode()
方法对数据进行编码,并使用encode()
方法将数据转换为字节流。接下来,创建一个Request
对象,需要传入URL、数据和请求方法(这里是POST)。然后,使用urlopen()
方法发送请求并获取响应。最后,使用read()
方法读取响应内容,并使用decode()
方法将字节流转换为字符串。
四、请求添加特定的Headers来进行请求伪装
可以使用Python中的requests库来发送HTTP请求,并在请求中添加Headers。下面是一个示例代码,演示如何添加特定的Hears:
import requests
# 定义Headers
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Referer': 'https://www.example.com',
'Cookie': 'sessionid=1234567890'
}
# 发送GET请求,并添加Headers
response = requests.get('https://www.example.com', headers=headers)
# 输出响应内容
print(response.text)
在上述示例中,我们定义了一个包含User-Agent、Referer和Cookie的Headers字典。然后使用requests库的get方法发送GET请求,并传入headers参数来添加Headers。最后,我们可以通过response对象的text属性来获取响应内容。
你可以根据需要自定义Headers中的字段和值,以实现不同的请求伪装效果。请注意,如果你需要发送POST请求,可以使用requests库的post方法,并传入headers参数。
此外,你还可以使用其他HTTP请求库来实现相同的效果,比如urllib库、http.client库等。