python爬虫urllib模块详解

目标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代码并进行

在这里插入图片描述


5. 设置网络超时

================================================================================

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&#x

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值