urllib.request.urlopen()基本使用-程序员宅基地

技术标签: python  Python基础详解  

1. urlopen( ) 方法

用于打开一个远程的url连接,并且向这个连接发出请求,获取响应结果。返回的结果是一个http响应对象,这个响应对象中记录了本次http访问的响应头和响应体

urllib.request.urlopen 参数介绍
urllib.request.urlopen(  url,   data=None,   [timeout, ]*,  cafile=None, capath=None, cadefault=False, context=None)

import urllib.request

url = 'https://www.python.org'
# 方式一
response = urllib.request.urlopen(url)
print(type(response))  # <class 'http.client.HTTPResponse'>
# 方式二
request = urllib.request.Request(url)
res = urllib.request.urlopen(url)
print(type(res))  # <class 'http.client.HTTPResponse'>

print(response.status)  # 200 获取响应状态码
print(response.reason)  # OK
print(response.version)  # 11
print(response)    # 获取响应,结果为:<http.client.HTTPResponse object at 0x10be801d0>
print(response.headers)   # 获取响应头
# Server: nginx
# Content-Type: text/html; charset=utf-8
# X-Frame-Options: DENY
# Via: 1.1 vegur
# Via: 1.1 varnish
# Content-Length: 48830
# Accept-Ranges: bytes
# Date: Thu, 12 Mar 2020 10:34:07 GMT
print(response.url)       # https://www.python.org  获取响应url
print(response.read())                  # 获取响应体 二进制字符串
print(response.read().decode("utf-8"))  # 对响应体进行解码
# 按行读取
print(response.readline())      # 读取一行
print(response.readline())      # 读取下一行
print(response.readlines())    # 读取多行。得到一个列表 每个元素是一行

通过结果可以发现response是一个HTTPResposne类型的对象,它主要包含的方法有read()、readinto()、getheader(name)、getheaders()、fileno()等函数和msg、version、status、reason、debuglevel、closed等属性。
例如response.read()就可以得到返回的网页内容,response.status就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到等。

2、添加data参数的时候就是以post请求方式请求,若没有data参数就是get请求方式

from urllib import request, parse

# 用parse模块,通过bytes(parse.urlencode())可以将post数据进行转换并放到
# urllib.request.urlopen的data参数中。这样就完成了一次post请求。
data = bytes(parse.urlencode({'word': 'hello'}), encoding='utf8')
response = request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

3、timeout参数使用

在某些网络情况不好或者服务器端异常的情况会出现请求慢的情况,或者请求异常,所以这个时候我们需要给
请求设置一个超时时间,而不是让程序一直在等待结果。所以使用 timeout参数设置超时时间

import urllib.request

response = urllib.request.urlopen('http://httpbin.org/get', timeout=1)
print(response.read())   # 正常结束,控制台显示:socket.time : timed out
response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
print(response.read())   # 超时,控制台显示:urllib.error.URLErrot : <urlopen error timed out>

4、Request(url=url, data=data, method='POST') 方法

web开发中,同一个url往往可以对应若干套不同的数据(或者界面,如手机、电脑),后台可以根据发起请求的前端的用户代理的不同,而决定应该给前端做出什么样的响应,如果检测到没有用户代理可以拒绝访问。

有很多网站为了防止程序爬虫爬网站造成网站瘫痪,会需要携带一些headers头部信息才能访问,最长见的有user-agent参数所以需要伪装请求头,去访问目标站。

urllib.ruquest.Request 参数介绍:

           urllib.ruquest.Request(url=url,headers=headers,data=data,method='POST')

 headers 参数使用;给请求添加头部信息,定制自己请求网站时的头部信息,使得请求伪装成浏览器等终端

url = "http://www.baidu.com/"
req = request.Request(url=url, headers={'UserAgent':'Mozilla/5.0 (Windows NT 10.0; Win64;x64)AppleWebKit/537.36 (KHTML, likeGecko)Chrome/71.0.3578.80Safari/537.36'})
res = request.urlopen(req)  # 用加入了请求头的请求对象发起请求
print(res.status)           # 打印状态码

添加请求头的post请求方式

from urllib import request, parse

url = 'http://httpbin.org/post'
headers = {
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
            'Host': 'httpbin.org'
          }
dict = {'name': 'taotao'}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

添加请求头的第二种post方式, 好处是自己可以定义一个请求头字典,然后循环进行添加

from urllib import request, parse

url = 'http://httpbin.org/post'
dict = {'name': 'Germey'}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, method='POST')
req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

5、urllib.parse模块 方法

url解析模块

1. urlparse( ) 方法 拆分url

URL解析函数侧重于将URL字符串拆分为其组件,或者将URL组件组合为URL字符串

拆分的时候协议类型部分就会是scheme=“ ”指定的部分。如果url里面已经带了协议,scheme指定的协议不会生效

urllib.parse.urlparse(urlstring, scheme=" ", allow_fragments=True)

urlparse("www.baidu.com/index.html;user?id=5#comment",scheme="https")

from urllib.parse import urlparse, urlunparse

# 对传入的url地址进行拆分; 可以用 scheme=“ ” 指定协议类型:
result = urlparse("http://www.baidu.com/index.html;user?id=5#comment")
print(result)
# ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html',
# params='user', query='id=5', fragment='comment')

2. urlunparse( ) 方法  拼接url

功能和urlparse的功能相反,它是用于拼接 

data = ['http', 'www.baidu.com', 'index.html', 'user', 'a=123', 'commit']
print(urlunparse(data))  # http://www.baidu.com/index.html;user?a=123#commit

6. urlencode( ) 方法 

这个方法可以将字典转换为url参数

对url进行编码,因为urllib这个框架中的url中不能出现汉字,只能出现ascii码字符

from urllib import parse

url = "https://www.baidu.com/s?"
# 把参数写成字典的形式
dic = {"ie": "utf-8", "wd": "奔驰"}
# 用parse的urlencode方法编码
parames = parse.urlencode(dic)
# 将编码以后的参数拼接到url中
url += parames
print(request.urlopen(url=url))

参考:https://www.lagou.com/lgeduarticle/34376.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mingyuli/article/details/104824709

智能推荐

涨粉6万,带货百万,人类幼崽竟靠干饭实力圈粉?_果集云略的博客-程序员宅基地

文章浏览阅读294次。“可爱”“吃货”是视频号馒头小胖墩儿出现频率最高的词,许多用户看到才3岁的馒头小朋友努力干饭的搞笑视频,纷纷被他圈粉了。2020年11月,馒头麻麻开始在视频号运营账号馒头小胖墩儿,凭借3岁儿子的干饭视频,吸引众多妈妈、奶奶粉的关注,单条视频吸粉6万,运营至今累计吸引40万用户关注。9月,馒头麻麻联合爱逛在视频号开启直播带货,突破10万销售额。双11期间,馒头妈妈连续直播10天,带货销售额超100万。而近期几场双12直播销售额也达到了50万+。作为母婴育儿博主,馒头麻麻是如何抓住视频号流量密码?又是如何

PySide的QStackedWidget例子_pyside stackedwidget-程序员宅基地

文章浏览阅读2.1k次。环境:python 2.7.8pyside 1.2.2_pyside stackedwidget

MyBatis动态传入表名查询数据-程序员宅基地

文章浏览阅读650次。@RequestMapping("/searchSjgl.htm") @ResponseBody publicList<IdSjgl>searchSjgl(HttpServletRequestrequest)throwsUnsupportedEncodingException{ List<IdSjgl>list=sjglServic..._mybatis 根据表名获取表元数据

YNB/酵母氮源基础 (含硫酸铵,不含氨基酸)的基本信息(供应SD/-Ade/-His/-Leu/-Met-Trp/-Ura with Agar/SD/-Cys/-Met/Ura with Agar)_酵母氮源基础无氨基酸和硫酸氨_小编在火星的博客-程序员宅基地

文章浏览阅读511次。名称:YNB/酵母氮源基础 (含硫酸铵,不含氨基酸)英文名:YNB/Yeast Nitrogen Base (without Amino Acids)成分:Nitrogen SourceAmmonium Sulfate … 5.0 gCompounds Supplying Trace ElementsBoric Acid …500.0 μgCopper Sulfate … 40.0 μgPotassium Iodide … 100.0 μgFerric Chloride … 200.0 μ_酵母氮源基础无氨基酸和硫酸氨

fliplr函数-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏6次。fliplr 左右翻转矩阵语法:B = fliplr(A)将矩阵A的列绕垂直轴进行左右翻转 matabc如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转。如果A是一个列向量,fliplr(A)还等于A。举例说明:例一:如果A是一个3×2的矩阵A =[1 4 2 5 3 6 ]fliplr(A)ans =..._fliplr函数

ZTE中兴通讯子公司(中兴智能视觉大数据):智能动态人脸识别高铁人证票核实管理系统-程序员宅基地

文章浏览阅读499次。 ZTE中兴通讯子公司(中兴智能视觉大数据):智能动态人脸识别高铁人证票核实管理系统 详细介绍 本系统是为了解决火车站、长途汽车站实行实名制后,需要对进站旅客进行人、证、票三合一查验而定制开发的一款产品。系统由前端人证票核验设备和后端应用管理平台组成。前端人证票核验设备部署在车站安检通道处,分别完成人、证、票的三合一核验。另外,系统还与公安部的黑名单库对接,实现嫌犯报警提醒...

随便推点

TypeScript----类型注解之数组与对象_typescript数组包对象的注解怎么写_羽千珏的博客-程序员宅基地

文章浏览阅读233次。TypeScript类型注解之数组// 初始化为空数组的时候需要添加类型注解let baskec: string[] = ['mike', 'james'];const dates = [new Date(), new Date()];// 二维数组const students = [['mike', 'nike'],['zhang'],['lise', 'san']];//提取值的时候帮助推断const player = baskec[0];const players = baske_typescript数组包对象的注解怎么写

代理模式(Proxy) Java实现-程序员宅基地

文章浏览阅读172次。代理模式代理(Proxy)定义代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理模式结构所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式类图如下:在代理模式中的角色:抽象对象角色:声明了目标对象和代理对象的共...

剑指offer(六十六)之机器人的运动范围_机器人的运动范围 剑指offer-程序员宅基地

文章浏览阅读2.1k次。题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?代码:import java.u_机器人的运动范围 剑指offer

我要“冬眠”_c++冬眠-程序员宅基地

文章浏览阅读2.9k次。我要“冬眠” 作者:zfive5(zhaozidong)联系:[email protected] 道生一,一生二,二生三,三生万物。 老子--《道德经》 1. Hibernate由来Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。_c++冬眠

树莓派人脸识别打卡系统(python pyqt opencv)-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏69次。界面效果图:每天的打卡记录存在txt文件中:局域网远程实时监控:用到的知识:1. opencv-python2. pyqt53. python-flask步骤:1. 人脸检测(adaboost + haar 特征)2. 人脸识别(lbp FaceRecognizer)3. 界面 pyqt。 日期、时间获取,控件、布局,多线程,界面更新、实时图像显示。4. 多线程,局域...

atitit 数字音频技术概论 艾提拉著 目录 1. 声学基础 2 1.1. 1.2人耳的听觉效应9 2 2. 第1章数字音频基础 2 2.1. 1.1音频的发展历史 2 2.2. 1.2音频的发展_数字音频概论考题-程序员宅基地

文章浏览阅读504次。atitit 数字音频技术概论 艾提拉著目录1. 声学基础 21.1. 1.2人耳的听觉效应9 22. 第1章数字音频基础 22.1. 1.1音频的发展历史 22.2. 1.2音频的发展方向 22.3. 1.4音频制作的硬件基础 32.4. 1.5音频的常见格式 33. 第3章音频信息采集与数字化28 33.1. 3.8.音频信息文件格式49 34..._数字音频概论考题