Python 爬虫 使用 urllib 3 库实现 HTTP 请求

一个爬虫的基本功能是读取URL和抓取网页内容,这就需要爬虫具备能够实现HTTP请求的功能。

使用 urllib 3 库实现

生成请求

>>> import urllib3
>>> # 创建 PoolManager 实例
>>> http=urllib3.PoolManager()
>>> # 通过reques函数创建请求,此处使用GET方法
>>> rq=http.request('GET','http://www.baidu.com')
>>> # 查看服务器响应码
>>> print('服务器响应码:',rq.status)
服务器响应码: 200
>>> # 查看相应实体
>>> print('相应实体:',rq.data)
相应实体: b'<!DOCTYPE html><!--STATUS OK-->\r\n<html>\r\n<head>\r\n\t<meta http-equiv="content-type" content="text/html;charset=utf-8">\r\n\t<meta http-equiv="X

注:输出结果太长已省略部分输出内容

请求头处理

>>> ua={'User-Agent':'Mozilla/5.0 (Windows NT 6.1;Win64;x64)Chrome/65.0.3325.181'}
>>> rq=http.request('GET','http://www.baidu.com',headers=ua)

timeout 设置

为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在GET请求中增加timeout参数设置,timeout参数通常为浮点数。

# 方法一:直接在url参数之后添加统一的timeout参数
url='http://www.baidu.com'
rq=http.request('GET',url,timeout=3.0)

# 方法二:分别设置连接与读取的timeout参数
rq=http.request('GET',url,timeout=urllib3.Timeout(connect=1.0,read=3.0))

# 方法三:在POOLManager实例中设置timeout参数
http=urllib3.PoolManager(timeout=4.0)
http=urllib3.PoolManager(timeout=urllib3.Timeout(connect=1.0,read=3.0))

请求重试设置

# 直接在url之后添加retries参数
rq=http.request('GET',url,retries=10)

# 分别设置5次请求重试次数与4次重定向的retries参数
rq=http.request('GET',url,retries=5,redirect=4)

# 同时关闭请求重试与重定向
rq=http.request('GET',url,retries=False)

# 仅关闭重定向
rq=http.request('GET',url,redirect=False)

# 在POOLManager实例中设置retries参数
http=urllib3.PoolManager(retries=5)

生成完整HTTP请求

import urllib3
# 创建 PoolManager 实例
http=urllib3.PoolManager()
# 目标 url
url='http://www.baidu.com'
# 设置请求头,UA信息
ua={'User-Agent':'Mozilla/5.0 (Windows NT 6.1;Win64;x64)Chrome/65.0.3325.181'}
# 设置超时时间
tm=urllib3.Timeout(connect=1.,read=3.0)
# 设置重试次数并生成请求
rq=http.request('GET',url,headers=ua,timeout=tm,retries=5,redirect=4)
# 查看服务器响应码
print('服务器响应码:',rq.status)
# 查看获取的内容
print('获取的内容:',rq.data.decode('utf-8'))

运行结果

服务器响应码: 200
获取的内容: <!DOCTYPE html><!--STATUS OK-->
    <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><meta name="description" 
    content="全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。">
...........省略
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据攻城小狮子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值