Python 库学习 —— urllib 学习


系列文章

Python 学习 01 —— Python基础
Python 库学习 —— urllib 学习
Python 库学习 —— BeautifulSoup4学习
Python 库学习 —— Re 正则表达式
Python 库学习 —— Excel存储(xlwt、xlrd)
Python 学习 02 —— Python爬虫
Python 库学习 —— Flask 基础学习
Python 学习03 —— 爬虫网站项目


urllib库主要用于操作网页URL并对网页内容进行抓取,通常我们用Python进行爬虫会用到。这里对部分功能进行简单说明以便后面进行爬虫。

1、导入urllib库

# 由于我们爬虫并不需要用到整个urllib,所以下面仅导入部分需要的
import urllib.request	# 用于发起请求
import urllib.parse  # 用于解析url
import urllib.error  # 导入可能抛出的异常以便捕获

# 目前版本针对https需要安全证书,所以需要导入ssl并执行下面语句
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

2、get方式访问

# 使用urlopen()默认使用get请求,返回一个HTML
response = urllib.request.urlopen("http://www.baidu.com")

# read()是读取整个HTML,此外还有readline()读取一行,readlines()读取所有并返回列表
# decode()将内容解码为utf-8
print(response.read().decode("utf-8"))

运行结果:就是百度首页HTML源码

3、post方式访问

# post请求可以携带表单数据
# 需要将数据data进行解析。先利用parse的urlencode将其编码,再利用bytes将其转为utf-8字节流。
data = bytes(urllib.parse.urlencode({"username": "小白", "password": "123456"}), encoding="utf-8")
# http://httpbin.org/post是一个HTTP测试网站
response = urllib.request.urlopen("http://httpbin.org/post", data=data)
print(response.read().decode("utf-8"))

运行结果:

说明一下

这里使用的网址是http://httpbin.org/post,它是由httpbin提供的测试网址。

我们可以利用里面提供的方法对我们的请求进行测试,例如这里使用了它提供的post请求。

当我们点击Try it out,然后点击Excute后,实际上就是浏览器对链接http://httpbin.org/post进行了POST请求,而下面Response body就是服务器给我们浏览器的响应。

4、超时处理

现实中的爬虫可能由于网络波动或是被网站阻止等意外情况,导致速度很慢之类的,所以对请求时间进行限制,当超过某个时间就先跳过当前爬取。这只需要添加一个参数即可。

# 超时处理(使用get测试):利用timeout参数设置为0.01秒超时,超时会抛出URLError异常。
try:
	response = urllib.request.urlopen("http://httpbin.org/get", timeout=0.01)
	print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
	print("超时")

5、网页相关信息

针对每个请求,服务器都会有响应的状态码、响应头部等,我们可以从返回值中直接读取。

# 获取网页信息
response = urllib.request.urlopen("http://baidu.com")
print(response.status)  # 状态码 200 表示成功,404 表示找不到网页,418 表示拒绝爬虫
print(response.getheaders())  # 获取响应头
print(response.getheader("Server"))  # 获取响应头某个参数

6、模拟浏览器

# 模拟浏览器
url = "https://www.douban.com"
# 这是添加请求头部用以模拟浏览器
headers = {
	"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
}
# 豆瓣是Get方式
# 用POST是这样:urllib.request.Request(url=url, data=data, headers=headers, method="POST")
req = urllib.request.Request(url=url, headers=headers) # 默认是Get
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

注意:https的请求需要导入ssl模块,并执行ssl._create_default_https_context = ssl._create_unverified_context

说明一下

请求头部里包含的是我们对目标URL发起请求所提供的信息,其中User-Agent表示用户代理,即我们是用什么来访问的,我们如果不添加headers的User-Agent就会暴露我们是python-urllib 3.9爬虫。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老板来碗小面加蛋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值