python中urllib包的网络请求教程


Posted in Python onApril 19, 2022

一、简介

  • 是一个 python 内置包,不需要额外安装即可使用
  • urllib 是 Python 标准库中用于网络请求的库,内置四个模块,分别是
  • urllib.request:用来打开和读取 url,可以用它来模拟发送请求,获取网页响应内容
  • urllib.error:用来处理 urllib.request 引起的异常,保证程序的正常执行
  • urllib.parse:用来解析 url,可以对 url 进行拆分、合并等
  • urllib.robotparse:用来解析 robots.txt 文件,判断网站是否能够进行爬取

二、发起请求

import urllib.request

# 方法一
resp = urllib.request.urlopen('http://www.baidu.com', timeout=1)
print(resp.read().decode('utf-8'))

# 方法二
request = urllib.request.Request('http://www.baidu.com')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

三、携带参数请求

  • 请求某些网页时需要携带一些数据
import urllib.parse
import urllib.request

params = {
'name':'autofelix',
'age':'25'
}

data = bytes(urllib.parse.urlencode(params), encoding='utf8')
response = urllib.request.urlopen("http://www.baidu.com/", data=data)
print(response.read().decode('utf-8'))

四、获取响应数据

import urllib.request

resp = urllib.request.urlopen('http://www.baidu.com')
print(type(resp))
print(resp.status)
print(resp.geturl())
print(resp.getcode())
print(resp.info())
print(resp.getheaders())
print(resp.getheader('Server'))

五、设置headers

import urllib.request

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
request = urllib.request.Request(url="http://tieba.baidu.com/", headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

六、使用代理

import urllib.request

proxys = urllib.request.ProxyHandler({
'http': 'proxy.cn:8080',
'https': 'proxy.cn:8080'
})

opener = urllib.request.build_opener(proxys)
urllib.request.install_opener(opener)

request = urllib.request.Request(url="http://www.baidu.com/")
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

七、认证登录

  • 有些网站需要携带账号和密码进行登录之后才能继续浏览网页
import urllib.request

url = "http://www.baidu.com/"
user = 'autofelix'
password = '123456'
pwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
pwdmgr.add_password(None,url,user,password)

auth_handler = urllib.request.HTTPBasicAuthHandler(pwdmgr)
opener = urllib.request.build_opener(auth_handler)
response = opener.open(url)
print(response.read().decode('utf-8'))

八、设置cookie

  • 如果请求的页面每次需要身份验证,我们可以使用 Cookies 来自动登录,免去重复登录验证的操作
import http.cookiejar
import urllib.request

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com/")

f = open('cookie.txt', 'a')
for item in cookie:
f.write(item.name+" = "+item.value+'\n')
f.close()

九、异常处理

from urllib import error, request

try:
resp = request.urlopen('http://www.baidu.com')
except error.URLError as e:
print(e.reason)

十、HTTP异常

from urllib import error, request

try:
resp = request.urlopen('http://www.baidu.com')
except error.HTTPError as e:
print(e.reason, e.code, e.headers, sep='\n')
except error.URLError as e:
print(e.reason)
else:
print('request successfully')

十一、超时异常

import socket, urllib.request, urllib.error

try:
resp = urllib.request.urlopen('http://www.baidu.com', timeout=0.01)
except urllib.error.URLError as e:
print(type(e.reason))
if isinstance(e.reason,socket.timeout):
print('time out')

十二、解析编码

from urllib import parse

name = parse.quote('飞兔小哥')

# 转换回来
parse.unquote(name)

十三、参数拼接

  • 在访问url时,我们常常需要传递很多的url参数
  • 而如果用字符串的方法去拼接url的话,会比较麻烦
from urllib import parse

params = {'name': '飞兔', 'age': '27', 'height': '178'}
parse.urlencode(params)

十四、请求链接解析

from urllib.parse import urlparse

result = urlparse('http://www.baidu.com/index.html?user=autofelix')
print(type(result))
print(result)

十五、拼接链接

  • 如果拼接的是两个链接,则以返回后面的链接
  • 如果拼接是一个链接和参数,则返回拼接后的内容
from urllib.parse import urljoin

print(urljoin('http://www.baidu.com', 'index.html'))

十六、字典转换参数

from urllib.parse import urlencode

params = {
'name': 'autofelix',
'age': 27
}
baseUrl = 'http://www.baidu.com?'
print(baseUrl + urlencode(params))

到此这篇关于python 包中的 urllib 网络请求教程的文章就介绍到这了!

Python 相关文章推荐
Python实现的百度站长自动URL提交小工具
Jun 27 Python
python方向键控制上下左右代码
Jan 20 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
pycharm重命名文件的方法步骤
Jul 29 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
教你用python控制安卓手机
May 13 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
PyTorch 如何检查模型梯度是否可导
Jun 05 Python
Python sklearn分类决策树方法详解
Sep 23 Python
python APScheduler执行定时任务介绍
Apr 19 #Python
Python数据可视化之Seaborn的安装及使用
python 闭包函数详细介绍
Apr 19 #Python
Python  lambda匿名函数和三元运算符
Apr 19 #Python
Python使用mitmproxy工具监控手机 下载手机小视频
使用Python通过企业微信应用给企业成员发消息
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 #Python
You might like
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
Yii2中datetime类的使用
2016/12/17 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Tensorflow 实现释放内存
2020/02/03 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
4s客服专员岗位职责
2013/12/01 职场文书
经典演讲稿汇总
2014/05/19 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
新员工入职欢迎词
2015/01/23 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL