代码示例如下:
import urllib.request
import urllib.parse
import json
要进行输入内容
key = input(“请输入内容:”)
data = {
“i”: key,
“from”: “AUTO”,
“to”: “AUTO”,
“smartresult”: “dict”,
“client”: “fanyideskweb”,
“salt”: “16374132986488”,
“sign”: “dfd139af546a8cd63de0676f446ca2ee”,
“lts”: “1637413298648”,
“bv”: “03a6a27012b22bc3c7ecc76381772182”,
“doctype”: “json”,
“version”: “2.1”,
“keyfrom”: “fanyi.web”,
“action”: “FY_BY_REALTlME”,
}
字节流,如果输入中文,需要处理的
data = urllib.parse.urlencode(data) # 转为十六进制形式
data = bytes(data, encoding=‘utf8’) # 转为字节流
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36’
}
目标url发请求
{“errorCode”:50} ,把_o
url = ‘https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule’
构建请求对象
req = urllib.request.Request(url, data=data, headers=headers)
发请求,获取响应对象
res = urllib.request.urlopen(req)
print(res.getcode()) # 得到响应码,200表示请求成功
html = res.read().decode(‘utf-8’)
print(type(html)) # <class ‘str’>,得到的是json数据
json数据转字典
dic = json.loads(html)
result = dic[“translateResult”] # [[{‘src’: ‘你好’, ‘tgt’: ‘hello’}]]
print(result[0][0][‘tgt’])
另一个简单的示例:
import urllib.request # 导入urllib.request模块
import urllib.parse # 导入urllib.parse模块
url = ‘https://www.httpbin.org/post’ # post请求测试地址
将表单数据转换为bytes类型,并设置编码方式为utf-8
print()
data = bytes(urllib.parse.urlencode({‘hello’: ‘python’}), encoding=‘utf-8’)
response = urllib.request.urlopen(url=url, data=data) # 发送网络请求
print(response.read().decode(‘utf-8’)) # 读取HTML代码并进行
================================================================================
urlopen()的timeout参数用于设置请求超时,该参数以秒为单位,表示如果在请求时超出了设置的时间还没有得到响应时就会抛出异常。
import urllib.request
url = ‘https://www.python.org/’
response = urllib.request.urlopen(url=url, timeout=0.1) # 设置超时时间为0.1秒
print(response.read().decode(‘utf-8’))
因为0.1秒设置的过快,结果因超时而产生异常,报错。
通常根据网络环境不同,设置一个合理的时间,如2秒,3秒。
对该网络超时异常进行捕捉并处理:
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
import socket # 导入socket模块
url = ‘https://www.python.org/’ # 请求地址
try:
发送网络请求,设置超时时间为0.1秒
response = urllib.request.urlopen(url=url, timeout=0.1)
print(response.read().decode(‘utf-8’)) # 读取HTML代码并进行utf-8解码
except urllib.error.URLError as error: # 处理异常
if isinstance(error.reason, socket.timeout): # 判断异常是否为超时异常
print(‘当前任务已超时,即将执行下一任务!’)
6. 复杂网络请求_urllib.request.Request()
==========================================================================================================
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
参数说明:
-
url:访问网站的完整url地址
-
data:默认为None,表示请求方式为get请求;如果需要实现post请求,需要字典形式的数据作为参数。
-
headers:设置请求头部信息,字典类型。
-
origin_req_host:用于设置请求方的host名称或者IP。
-
unverifiable:用于设置网页是否需要验证,默认值为False。
-
method:用于设置请求方式,如GET,POST。
=============================================================================
url = ‘https://www.baidu.com’
定义请求头信息
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36’}
创建Request对象
r = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen® # 发送网络请求
print(response.read().decode(‘utf-8’)) # 读取HTML代码并进行utf-8解码
import urllib.request # 导入urllib.request模块
import urllib.parse # 导入urllib.parse模块
url = ‘https://www.httpbin.org/post’ # 请求地址
定义请求头信息
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36’}
将表单数据转换为bytes类型,并设置编码方式为utf-8
data = bytes(urllib.parse.urlencode({‘hello’: ‘python’}),encoding=‘utf-8’)
创建Request对象
r = urllib.request.Request(url=url,data=data,headers=headers,method=‘POST’)
response = urllib.request.urlopen® # 发送网络请求
print(response.read().decode(‘utf-8’)) # 读取HTML代码并进行utf-8解码
创建出一个Request对象,然后直接调用urlopen()函数。
创建Request也被称为创建请求对象。
=======================================================================================
Cookies是服务器向客户端返回响应数据时所留下的标记。当客户再次访问服务器时会携带这个标记。一般登录一个页面成功后,会在浏览器的cookie中保留一些信息,再次访问时服务器核对后即可确认当前用户登录过,此时可直接将登录后的数据返回。
import urllib.request
url = “https://www.csdn.net/”
opener = urllib.request.build_opener() # 获取opener对象
resp = opener.open(url)
print(resp.read().decode())
因为urlopen()方法不支持代理、cookie等其他的HTTP/GTTPS高级功能,所以这里不用urlopen()发送请求,而需要创建一个opener对象(这本来是urllib2中的方法)。示例如下。学习过程中这里作为了解即可,建议重点研究/使用requests库。
import urllib.request # 导入urllib.request模块
import http.cookiejar # 导入http.cookiejar子模块
登录后页面的请求地址
url = ‘xxx’
cookie_file = ‘cookie.txt’ # cookie文件
cookie = http.cookiejar.LWPCookieJar() # 创建LWPCookieJar对象
读取cookie文件内容
cookie.load(cookie_file,ignore_expires=True,ignore_discard=True)
生成cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
创建opener对象
opener = urllib.request.build_opener(handler)
response = opener.open(url) # 发送网络请求
print(response.read().decode(‘utf-8’)) # 打印登录后页面的html代码
==============================================================================
import urllib.request # 导入urllib.request模块
url= ‘xxxxxxxxxxxxxxx’
创建代理IP
proxy_handler = urllib.request.ProxyHandler({
‘https’: ‘xxxxxxxxxxxxxxxxx’ # 写入代理IP
})
创建opener对象
opener = urllib.request.build_opener(proxy_handler)
response = opener.open(url,timeout=2)
print(response.read().decode(‘utf-8’))
=============================================================================
urllib模块中的urllib.error子模块包含了URLError与HTTPError两个比较重要的异常类。
URLError类提供了一个reason属性,可以通过这个属性了解错误的原因。示例如下:
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
try:
向不存在的网络地址发送请求
response = urllib.request.urlopen(‘https://www.python.org/1111111111.html’)
except urllib.error.URLError as error: # 捕获异常信息
print(error.reason) # 打印异常原因
程序运行结果:
HTTPError类是URLError的子类,主要用于处理HTTP请求所出现的一次。此类有以下三个属性。
-
code :返回HTTP状态码
-
reason 返回错误原因
-
headers 返回请求头
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
try:
向不存在的网络地址发送请求
response = urllib.request.urlopen(‘https://www.python.org/1111111111.html’)
print(response.status)
except urllib.error.HTTPError as error: # 捕获异常信息
print(‘状态码为:’,error.code) # 打印状态码
print(‘异常信息为:’,error.reason) # 打印异常原因
print(‘请求头信息如下:\n’,error.headers) # 打印请求头
结果如下(部分):
因为URLError是HTTPError的父类,所以在捕获异常的时候可以先找子类是否异常,父类的异常应当写到子类异常的后面,如果子类捕获不到,那么可以捕获父类的异常。
URLError产生的原因主要是
-
- 网络没有连接,
-
- 服务器连接失
-
- 找不到指定的服务器。
当使用urlopen或 opener.open 不能处理的,服务器上都对应一个响应对象,其中包含一个数字(状态码),如果urlopen不能处理,urlopen会产生一个相应的HTTPError对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态码。
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
try:
response = urllib.request.urlopen(‘https://www.python.org/’,timeout=0.1)
except urllib.error.HTTPError as error: # HTTPError捕获异常信息
print(‘状态码为:’,error.code) # 打印状态码
print(‘HTTPError异常信息为:’,error.reason) # 打印异常原因
print(‘请求头信息如下:\n’,error.headers) # 打印请求头
except urllib.error.URLError as error: # URLError捕获异常信息
print(‘URLError异常信息为:’,error.reason)
如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-VAb7QIIr-1710981284412)]