爬取网页数据之urllib库

目录

什么是urllib库

快速使用urllib库爬取网页

使用urllib实现数据传输

添加特定Headers-请求伪装


一、什么是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,还有一些其他的方法。以下是一些常用的方法:

  1. urlencode(): 对字典或列表进行编码,生成一个适合在URL中使用的字符串。
  2. urlparse(): 解析URL,返回一个解析后的命名元组(parsed-result)。
  3. urlunparse(): 将命名元组重新组装为URL。
  4. urljoin(): 合并基础URL和相对URL,返回一个新的URL。
  5. getproxies(): 返回当前系统使用的所有代理服务器的字典。
  6. proxy_support(): 提供对代理服务器的支持。
  7. url2pathname(): 将URL转换为文件系统路径。
  8. getdefaultproxy(): 返回当前系统默认的代理设置。
  9. setdefaultproxy(): 设置当前系统默认的代理设置。
  10. unquote(): 对给定的字符串进行解码,返回解码后的字符串。
  11. quote(): 对给定的字符串进行编码,返回编码后的字符串。
  12. parse_qs(): 对给定的字符串进行解析,返回一个字典。
  13. to_bytes(): 将给定的字符串转换为字节。
  14. to_unicode(): 将给定的字节转换为字符串。
  15. pathname2fileinfo(): 将文件系统路径转换为文件信息对象。
  16. fileinfo2pathname(): 将文件信息对象转换为文件系统路径。
  17. geturl():返回给定URL的原始URL。
  18. pathname2pathname():将文件系统路径转换为另一个文件系统路径。
  19. urlopen():打开给定的URL,并返回一个文件对象。
  20. urlretrieve():下载给定的URL的内容,并将其保存到本地文件系统中。
  21. 这些是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库等。

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值