大数据预处理与采集实验三:Urllib的GET和POST请求(1)

目录

Urllib基本操作-GET

➢没有进行utf-8编码的输出

➢经过utf-8decode之后的输出

➢ Timeout参数:捕获由于连接超时而引发的异常

◆Urllib基本操作-定制请求头 

➢ 在GET请求中加入多个访问参数

◆Urllib基本操作-POST

➢有道词典网页爬取:找到的数据包的Headers,可以记录下请求的相关数据

➢查看请求携带参数

Urllib3

◆Urllib3完成get请求


Urllib基本操作-GET

先导入urllib模块,定义想要访问的网址,使用urlopen()对参数中的URL发送请求
urllib.request.urlopen( url, data=None, [timeout, ] *, cafile=None,
capath=None, cadefault=False, context=None)
# 使用urllib来获取百度首页的源码
import urllib.request
# 1.定义一个url 就是要访问的地址
url = ‘http://www.baidu.com’
# 2.模拟浏览器向服务器发送请求(需要联网) response=响应
response = urllib.request.urlopen(url)
# 3.获取响应中的页面源码 content内容的意思
content = response.read()
# read方法 返回的是字节式的二进制数据
print(content)
# 我们要将二进制数据转换为字符串,二进制-->字符串 解码 decode('编码的格式')
content = response.read().decode( 'utf-8’ )
print(content)
# 使用urllib来获取百度首页的源码
import urllib.request# 1.定义一个url 就是要访问的地址
url = 'http://www.baidu.com'# 2.模拟浏览器向服务器发送请求(需要联网) response=响应
response = urllib.request.urlopen(url)# 3.获取响应中的页面源码 content内容的意思
content = response.read()
print(content)
# read方法 返回的是字节式的二进制数据
# 我们要将二进制数据转换为字符串
# 二进制-->字符串 解码 decode('编码的格式')
content = response.read().decode('utf-8')  # 这一步非常重要# 4.打印数据
print(content)# #获取状态码 如果是200了,那么就证明我们的逻辑没有错
#print(response.getcode())
#
# #返回url地址
#print(response.geturl())
#
# #获取是一个状态信息
#print(response.getheaders())

没有进行utf-8编码的输出

经过utf-8decode之后的输出

Timeout参数:捕获由于连接超时而引发的异常

# 使用urllib来获取百度首页的源码
import urllib.request# 1.定义一个url 就是要访问的地址
url = 'http://www.baidu.com'# 2.模拟浏览器向服务器发送请求(需要联网) response=响应
response = urllib.request.urlopen(url)# 3.获取响应中的页面源码 content内容的意思
content = response.read()
print(content)
# read方法 返回的是字节式的二进制数据
# 我们要将二进制数据转换为字符串
# 二进制-->字符串 解码 decode('编码的格式')
content = response.read().decode('utf-8')  # 这一步非常重要# # timeout 参数
response = urllib.request.urlopen('http://httpbin.org/get', timeout=1)
print(response.read())import socket
import urllib.error
#
try:response = urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)
except urllib.error.URLError as e:if isinstance(e.reason,socket.timeout):print('TIME OUT')# 4.打印数据
print(content)# #获取状态码 如果是200了,那么就证明我们的逻辑没有错
#print(response.getcode())
#
# #返回url地址
#print(response.geturl())
#
# #获取是一个状态信息
#print(response.getheaders())

Urllib基本操作-定制请求头 

在爬取网页的时候,输出的信息中有时候会出现“抱歉,无法访问”等字眼,这就是禁止爬
取,需要通过定制请求头Headers来解决这个问题。定制Headers是解决requests请求被拒
绝的方法之一,相当于我们进入这个网页服务器,假装自己本身在爬取数据。请求头
Headers提供了关于请求、响应或其他发送实体的消息,如果没有定制请求头或请求的请求
头和实际网页不一致,就可能无法返回正确结果。
获取一个网页的Headers的方法如下:使用360、火狐或谷歌浏览器打开一个网址(比如
“http://www.baidu.com”),在网页上单击鼠标右键,在弹出的菜单中选择“查看元
素”,然后刷新网页,再按照如图3-4所示的步骤,先点击“Network”选项卡,再点击
“Doc”,接下来点击“Name”下方的网址,就会出现类似如下的Headers信息:
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/46.0.2490.86 Safari/537.36

 

 

在GET请求中加入访问参数:在百度中搜索北京,获取搜索结果页面
是否可以直接定义url=https://www.baidu.com/s?wd=北京?
不可以,默认只搜索ascii编码,没有北京这两个字,所以需要把它变成unicode让机器识别

# #get请求中加入访问参数
import urllib.request
import urllib.parse
#直接复制一些搜索北京的网址:
# https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6# 需求:获取https://www.baidu.com/s?wd=北京的网页代码
# 是否可以直接定义url=https://www.baidu.com/s?wd=北京?
#不可以,默认只搜索ascii编码,没有北京这两个字,所以需要把它变成unicode让机器识别# 寻找url
url = "https://www.baidu.com/s?wd="
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44'
}
# 使用quote方法进行编码转换
name = urllib.parse.quote("北京")
# 组装url
url = url + name
# print(url)
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 向服务器发请求
response = urllib.request.urlopen(request)
# 获取响应信息
content = response.read().decode('utf-8')
# 打印响应信息
print(content)#多于一个参数时,请求头定制
#参数不止有一个,可以用&符号链接多个,假设我们加一个两会。出现一个问题,不仅要把北京编码unicode,还要把两会也编码,可以用quote逐个转换,但效率低,且要拼接。要解决多参数问题,可以用urlencode帮助我们
#urlencode要求里面的参数以字典形式存在,逗号分割

在GET请求中加入多个访问参数

参数不止有一个,可以用&符号在转换后进行链接。
为方便解决多参数转换及拼接问题,可以用urlencode帮助我们;urlencode要求里面的参数
以字典形式存在,逗号分割

import urllib.request
import urllib.parse
url = 'https://cn.bing.com/search?'data={'go':'搜索','q':'北京 天气'}
new_data = urllib.parse.urlencode(data)
print(new_data)
headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Cookie': 'BIDUPSID=83261851D92939FFFF2D2C3800B6CCA2; PSTM=1574440855; __yjs_duid=1_6e86551c30fb47a64a0c5e667dea7db81620194211269; BD_UPN=12314753; BAIDUID=ED1F16239BBD2AB0CF8AF7923E3A68DE:FG=1; ispeed_lsm=2; BDUSS=XVyNi1XcXZ-eTJCMnhzeURYYUstOGh0T3N1WnN0cTIwRGNrRDczRlJsY2ptMXhqRVFBQUFBJCQAAAAAAAAAAAEAAAD-PGUJt8W~1V9pbmcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMONWMjDjVjb; BDUSS_BFESS=XVyNi1XcXZ-eTJCMnhzeURYYUstOGh0T3N1WnN0cTIwRGNrRDczRlJsY2ptMXhqRVFBQUFBJCQAAAAAAAAAAAEAAAD-PGUJt8W~1V9pbmcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMONWMjDjVjb; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BA_HECTOR=8l0g0l2ga00h25a52g81dkhm1hk9pd81a; BAIDUID_BFESS=ED1F16239BBD2AB0CF8AF7923E3A68DE:FG=1; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; BD_CK_SAM=1; PSINO=7; ZFY=SR4hfozWRIXmU7ouv2ASem0KdSz0WImntiWy4T8Nftw:C; BD_HOME=1; baikeVisitId=53b5daaa-05ec-4fc4-b9d5-a54ea3e0658d; H_PS_PSSID=37542_36559_37561_37550_37299_36885_34813_37486_37402_36805_37406_36786_37482_37497_26350_37365_37455; H_PS_645EC=878fjGnEi%2FQTHR5lTn8cql%2FqGCKSJk5xVRVe%2FWpoH2dRPvRJayxDhPJv8U3BoEGTXa%2Bd; COOKIE_SESSION=1103_9_9_9_19_6_0_0_9_2_0_0_2611_8863_3_0_1665474424_1665471813_1665474421%7C9%23358_1132_1665459981%7C9; BDSVRTM=0'
}
url=url+new_data
print(url)
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

Urllib基本操作-POST

urllib.request模块实现发送POST请求获取网页内容的实例
post请求的参数,一定要先进行编码,使用url.parse.urlencode,返回值类型是字
符串类型
编码结果还需要转换成byte类型:之前定义的data是字符串类型。而发送请求的
request中,要求的data是byte字节型(否则urlopen时报错)
可以使用data = bytes(data, ‘utf-8’) 也可以 data = data.encode('utf-8')
与GET请求不同,post参数不是直接拼在url后面,而是放在请求对象的参数里面

有道词典网页爬取:找到的数据包的Headers,可以记录下请求的相关数据

请求链接https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4
请求方式:POST请求头

 

 

import urllib.request
import urllib.parse# 请输入您要翻译的内容
content ='你好'       #最后用input('请输入您要翻译的内容:')替代'你好'
url = 'https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4'
headers = {"Cookie": 'OUTFOX_SEARCH_USER_ID=-1124603977@10.108.162.139; JSESSIONID=aaamH0NjhkDAeAV9d28-x; OUTFOX_SEARCH_USER_ID_NCOO=1827884489.6445506; fanyi-ad-id=305426; fanyi-ad-closed=1; ___rl__test__cookies=1649216072438',"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36"
}
# 携带数据
data = {'q': content,'le': 'ja','t': '9','client': 'web','sign': '520a657bfae6f88b2deaa67067865128','keyfrom': 'webdict',}data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url, data=data)
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')
print('翻译结果:\n', html)

查看请求携带参数

当我们查询的词不一样的时候,sign这个参数会不同

当我们查询的所用语言不一样的时候,le这个参数会不同

Urllib3

urllib3是一个功能强大、条理清晰、用于HTTP客户端的Python库,许多Python的
原生系统已经开始使用urllib3。urllib3提供了很多python标准库里所没有的重要特
性,包括:线程安全、连接池、客户端SSL/TLS验证、文件分部编码上传、协助处
理重复请求和HTTP重定位、支持压缩编码、支持HTTP和SOCKS代理、100%测试
覆盖率等。
在使用urllib3之前,需要打开一个cmd窗口使用如下命令进行安装
​​​​​​​pip install urllib3

Urllib3完成get请求

import urllib3
http=urllib3.PoolManager()
response=http.request('GET','http://www.baidu.com'
)
print(response.status)
print(response.data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libpcap获取数据包

一、用户空间 以Linux以及TPACKET_V3为例。 调用pcap_dispatch获取数据包,然后回调用户传递的数据包处理函数。 read_op实际调用的是pcap_read_linux_mmap_v3 // pcap.c int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user) {return (p-…

钡铼技术助力ARM工控机在智慧交通中的创新应用

在交通运输领域,钡铼技术ARM工控机可以实现以下功能: 实时监控和管理:利用钡铼技术ARM工控机,可以对交通运输中的车辆、船只、飞机等进行实时监测和管理,帮助调度员提高车辆调度和路线规划的准确性和效率。 安全保障&…

Vue 3.0中Treeshaking特性是什么?

一、是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code elimination 简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码 如果把代码打包比作制作蛋糕,传统的方式是把鸡…

js实现容器之间交换

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ JavaScript是一种非常流行和常用的编程语言,它在web开发中起着至关重要的作用,在实现网页动态交互、数据…

实时检测并识别视频中的汽车车牌

对于基于摄像头监控的安全系统来说,识别汽车牌照是一项非常重要的任务。我们可以使用一些计算机视觉技术从图像中提取车牌,然后我们可以使用光学字符识别来识别车牌号码。在这里,我将引导您完成此任务的整个过程。 要求: import cv2import numpy as npfrom skimage impor…

Android 原生定位开发(解决个别手机定位失败问题)

文章目录 前言一、实现步骤二、使用步骤1.服务启动工具类2.实现LocationService 总结 前言 在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便。定位一般分为三种发方案:即GPS定位、Google网络定位以及基站定位。…

黑马 小兔鲜儿 uniapp 小程序开发- 商品详情模块- day05

黑马 小兔鲜儿 uniapp 小程序开发- 分类模块- day04-CSDN博客 小兔鲜儿 - 商品详情(登录前)-day05 商品详情页分为两部分讲解: 登录前:展示商品信息,轮播图交互(当前模块)登录后:加入购物车,立…

Xcode中如何操作Git

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

[云原生案例1.] 构建LNMP架构并运行Wordpress个人博客平台

文章目录 1. 当前需求2. 前置准备3. 搭建过程3.1 创建自定义网络3.2 部署并配置nginx3.2.1 创建工作目录并上传相关软件包3.2.2 解压缩相关软件包3.2.3 编写Dockerfile文件3.2.4 编写nginx.conf文件3.2.5 创建nginx镜像3.2.6 运行容器 3.3 部署并配置mysql3.3.1 创建工作目录3.…

软件架构的概念

1.软件架构演化 为了适应用户的新需求、业务环境和运行环境的变化等,软件架构需要不断地进行自身的演化,也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲,软件架构的演化就是软件整体结构的演化,演化过程涵盖…

Python机器学习基础(二)---数据可视化

一.简单图形生成 1.Pandas生成折线图 import pandas as pd import numpy as np from matplotlib import pyplot #生成10行4列 标准正态分布的数据 df pd.DataFrame(np.random.randn(10,4),indexpd.date_range(1/1/2000,periods10), columnslist(ABCD)) df.plot() print(np.r…

从零学算法10

10.给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: 输入:s…

Docker(2)——Docker镜像的基本命令

目录 一、简介 二、基本命令 1. Docker命令官方文档 2. 展示镜像 3. 搜索镜像 4. 下载镜像 5. 删除镜像 一、简介 本篇文章是Docker专栏的第二章,主要用于介绍Docker镜像的一些基本命令 二、基本命令 1. Docker命令官方文档 本篇博客仅记录常用的Docker镜…

LeetCode 2433. 找出前缀异或的原始数组【位运算,数组】1366

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

分布式理论和分布式锁知识点总结

文章目录 (一) 分布式理论算法和协议1)CAP理论总结 2)BASE理论BASE 理论的核心思想基本可用软状态最终一致性 3)Paxos算法Basic Paxos 算法4) Raft算法1 拜占庭将军 5)Gossip协议 (二) 分布式锁分布式锁应该具备哪些条…

89 柱状图中最大的矩形

柱状图中最大的矩形 类似接雨水(反过来,相当于找接雨水最少的一段)题解1 暴力搜索(超时) O ( N 2 ) O(N^2) O(N2)另一种 题解2 单调栈【重点学习】常数优化 给定 n 个非负整数,用来表示柱状图中各个柱子的…

看完这个,别说你还找不到免费好用的配音软件

有很多小伙伴还在找配音工具,今天就给大家一次性分享四款免费好用的配音工具,每一个都经过测试,并且是我们自己也在用的免费配音工具 第一款,悦音配音工具 拥有强悍的AI智能配音技术,更专业,完美贴近真人配…

6. 一文快速学懂常用工具——GDB(下)

本章讲解知识点 GDB 调试 core 文件GDB 调试多线程本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习…

算法升级之路(六)

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 解题思路&…

企业型多域名SSL证书怎么申请?有哪些流程?

随着越来越多的交流和交易发生在互联网上,保护敏感数据和建立用户信任成为企业的首要任务。HTTPS协议是一种关键的安全措施,用于保护数据传输的机密性和完整性。为了实施HTTPS,企业可以选择安装SSL证书。而对于需要保护多个域名的企业&#x…