大数据预处理与采集实验三: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.rhkb.cn/news/176709.html

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

相关文章

Linux基本网页访问--防火墙、服务管理、selinux强制访问

正常访问外部网络需要进行4部操作操作: 1、开启httpd服务systemctl restart httpd 2、关闭防火墙服务 systemctl stop firewalld 3、访问数据库时,需要开启数据库的服务systemctl restart mariadb 4、关闭强制访问 setenforce 0 1、防火墙管理 firewal…

有了定时关机,省时省力!如何在Windows 11中设置自动关机

你有时会忘记关闭Windows 11吗?如果是这样的话,也许你应该考虑安排关机时间,以确保你的电脑在忘记选择关机时也能关机。 当你需要等待大型游戏下载完成时,安排关闭也是一个好主意。你可以用一个相对简单的命令在Windows 11中设置自动关机。 计时器将在指定的倒计时时间过…

表白墙(服务器)

目录 0.需求 1.创建Maven项目 2.给pom.xml内引入三个依赖 3.完善目录,并补充web.xml中的内容 4.编写代码 后端代码 ​编辑前端代码 5.引入数据库 创建message表 创建工具类 往MessageServlet类中添加方法 0.需求 前面写好了表白墙页面,但存…

C# Onnx Ultra-Fast-Lane-Detection-v2 车道线检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; usi…

你真的会学习网络安全吗?

我敢说,现在网上90%的文章都没有把网络安全该学的东西讲清楚。 为什么?因为全网更多的都是在讲如何去渗透和公鸡,却没有把网安最注重的防御讲明白。 老话说得好:“攻击,是为了更好的防御。”如果连初衷都忘了&#xff…

数据结构和算法——用C语言实现所有图状结构及相关算法

文章目录 前言图的基本概念图的存储方式邻接矩阵邻接表十字链表临界多重表 图的遍历最小生成树普里姆算法(Prim)克鲁斯卡尔算法(Kruskal) 最短路径BFS求最短路径迪杰斯特拉算法(Dijkstra)弗洛伊德算法&…

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同,gradle的版本和gradle plugins的版本都会影响使用方式。 基于此,本文只能作为参考,而不能作为唯一答案,如果要完全依赖本文,则…

8年经验之谈 —— Redis的性能测试与优化!

Redis作为一种高性能的Key-Value数据库,一直受到众多开发者和企业的青睐。然而,在高并发、大数据存储的应用场景中,如何测试并优化Redis的性能,成为了问题。本文将从测试与优化两个方面来讲解如何达到最优的Redis性能。 一、性能…

深入浅出排序算法之计数排序

目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 首先看一个题目,有n个数,取值范围是 0~n,写出一个排序算法,要求时间复杂度和空间复杂度都是O(n)的。 为了达到这种效果,这一篇将会介绍一种不基于比较的排序方法。这…

K-means(K-均值)算法

K-means(k-均值,也记为kmeans)是聚类算法中的一种,由于其原理简单,可解释强,实现方便,收敛速度快,在数据挖掘、聚类分析、数据聚类、模式识别、金融风控、数据科学、智能营销和数据运…

我和云栖有个约会

云栖大会:聚焦创新,驱动未来 2009年,一场地方网站峰会在中国掀起了技术的浪潮。随着时间的推移,这场峰会逐渐演变成了全球领先的科技盛会——云栖大会。回首历史,云栖大会不仅是中国云计算产业发展的见证者&#xff0c…

高效分割分段视频:提升您的视频剪辑能力

在数字媒体时代,视频剪辑已经成为一项重要的技能。无论是制作个人影片、广告还是其他类型的视频内容,掌握高效的视频剪辑技巧都是必不可少的。本文将介绍如何引用云炫AI智剪高效地分割和分段视频,以提升您的视频剪辑能力。以下是详细的操作步…

2023-11-01 LeetCode每日一题(参加会议的最多员工数)

2023-11-01每日一题 一、题目编号 2127. 参加会议的最多员工数二、题目链接 点击跳转到题目位置 三、题目描述 一个公司准备组织一场会议,邀请名单上有 n 位员工。公司准备了一张 圆形 的桌子,可以坐下 任意数目 的员工。 员工编号为 0 到 n - 1 。…

appium操控微信小程序的坑

appium操控微信小程序的坑 打不开启动页面driver的context只有NATIVE_APP小程序上元素找不到 我打算使用appium操控微信小程序,只要能够获取到小程序的页面元素就算成功。下面都是我遇到的问题。 打不开启动页面 以下是我的appium的配置参数和代码: de…

基于Taro + React 实现微信小程序半圆滑块组件、半圆进度条、弧形进度条、半圆滑行轨道(附源码)

效果: 功能点: 1、四个档位 2、可点击加减切换档位 3、可以点击区域切换档位 4、可以滑动切换档位 目的: 给大家提供一些实现思路,找了一圈,一些文章基本不能直接用,错漏百出,代码还藏着掖…

Kubernetes - Ingress HTTP 升级 HTTPS 配置解决方案(新版本v1.21+)

之前我们讲解过 Kubernetes - Ingress HTTP 搭建解决方案,并分别提供了旧版本和新版本。如果连 HTTP 都没搞明白的可以先去过一下这两篇 Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客Kubernetes - Ingress HTTP 负载搭建部署解决方案…

SpringMVC Day 07 : 表单验证

前言 表单验证在Web开发中是非常常见和重要的一部分,它用于确保用户提交的数据符合预期的规则和限制。 通过表单验证,我们可以有效地捕获并处理用户输入中的错误或不正确的数据,从而提高应用程序的数据质量和用户体验。在本教程中&#xff…

Thread

Thread 线程启动线程第一种创建线程线程的第二种创建方式使用匿名内部类完成线程的两种创建 Thread API线程的优先级线程提供的静态方法守护线程用户线程和守护线程的区别体现在进程结束时 多线并发安全问题同步块 线程 启动线程 启动线程:调用线程的start方法,而不是直接调用…

lua-resty-request库写入爬虫ip实现数据抓取

根据提供的引用内容,正确的库名称应该是lua-resty-http,而不是lua-resty-request。使用lua-resty-http库可以方便地进行爬虫,需要先安装OpenResty和lua-resty-http库,并将其引入到Lua脚本中。然后,可以使用lua-resty-h…

【网络协议】聊聊http协议

当我们输入www.baidu.com的时候,其实是先将baidu.com的域名进行DNS解析,转换成对应的ip地址,然后开始进行基于TCP构建三次握手的连接,目前使用的是1.1 默认是开启了keep-Alive。可以在多次请求中进行连接复用。 HTTP 请求的构建…