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

news2025/7/14 19:48:17

目录

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.coloradmin.cn/o/1157836.html

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

相关文章

中文编程软件哪个好用,初学编程软件推荐

中文编程软件哪个好用,初学编程软件推荐 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,想如图这个实例就是用这个…

关于Kubernetes——cka认证含金量怎么样?

2019年和2020年,Rancher分别对近1,000名专业人员展开了调查。调查结果表明,Kubernetes在不同行业连续两年保持了90%以上的采用率,而生产环境中的容器采用率从2019年的85%增长至2020年的87%。 SUSE大中华区总裁秦小康表示:“从调研…

Seata入门系列【18】Seata集成Mybatis-Plus多数据源

1 前言 在使用单个服务,多数据源时,也存在分布式事务问题。 当单体系统需要访问多个数据库(实例)时就会产生分布式事务。 比如:用户信 息和订单信息分别在两个MySQL实例存储,用户管理系统删除用户信息&am…

Scala和Play WS库编写的爬虫程序

使用Scala和Play WS库编写的爬虫程序,该程序将爬取网页内容: import play.api.libs.ws._ import scala.concurrent.ExecutionContext.Implicits.global ​ object BaiduCrawler {def main(args: Array[String]): Unit {val url ""val proxy…

超详细的接口测试用例编写

自动化始终只是辅助测试工作的一个手段,对于测试人员而言,测试基础和测试用例的设计才是核心。如果测试用例的覆盖率或者质量不高,那将这部分用例实现为自动化用例的意义也就不大了。 那么,接口测试用例应该怎么编写呢&#xff1…

Powercli批量修改分布式交换机端口组

背景 需求&#xff1a; 批量修改虚拟机的分布式端口组 解决&#xff1a; 三条命令解决&#xff1a;先获取目标虚拟机、获取目标端口组、修改虚拟机端口组、检查虚拟机状态。 $vm Get-VM -Name <虚拟机名称> $portGroup Get-VirtualPortGroup -Name <端口组名称…

数据出境安全评估:重要性和实施策略

数据出境安全评估是确保数据安全和合规的重要环节。随着全球化的加速和信息技术的快速发展&#xff0c;企业和个人需要处理大量的数据&#xff0c;其中许多数据涉及个人隐私和企业机密。因此&#xff0c;数据出境安全评估对于保护数据安全和隐私权至关重要。 一、数据出境安全评…

深度学习_3 数据操作之线代,微分

线代基础 标量 只有一个元素的张量。可以通过 x torch.tensor(3.0) 方式创建。 向量 由多个标量组成的列表&#xff08;一维张量&#xff09;。比如 x torch.arange(4) 就是创建了一个1*4的向量。可以通过下标获取特定元素&#xff08;x[3]&#xff09;&#xff0c;可以通…

什么是Webpack的热模块替换(Hot Module Replacement)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

springboot医院绩效考核系统源码

医院绩效考核系统是一种以人力资源管理为基础&#xff0c;选用适合医院组织机构属性的绩效理论和方法&#xff0c;基于医院战略目标&#xff0c;构建全方位的绩效考评体系&#xff0c;在科学、合理的绩效管理体系基础上&#xff0c;采用科学管理的方法&#xff0c;如平衡计分卡…

CS224W4.2——计算PageRank

在介绍了PageRank及其公式之后&#xff0c;我们讨论了求解PageRank的方法。我们提出了求解图的随机邻接矩阵(即PageRank)的主特征向量的幂次迭代方法。此外&#xff0c;我们在之前的PageRank实现中引入了两个问题:死角&#xff08;dead ends&#xff09;(没有外部链接的节点)和…

HWebkit库的程序示例

HWebkit库的爬虫程序&#xff0c;并且能够使用指定的服务器。以下是代码的每一行的中文解释&#xff1a; import HWebkit import Network.HTTP.Client import Network.HTTP.Client.TLS import Data.Text.Encoding ​ -- 创建服务器的连接&#xff0c;使用的端口和主机是 proxy…

(免费领源码)Java#springboot#Mysql智慧图书馆系统34117-计算机毕业设计项目选题推荐

摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在图书馆管理的要求下&#xff0c;开发一款整体式结构的智慧图书馆系统…

经营抖音小店的新手需要遵守的规则和注意事项

作为新手开抖音小店&#xff0c;四川不若与众帮你整了需要注意以下规则&#xff1a; 1. 注重产品质量&#xff1a;提供高质量的产品是吸引用户的关键。确保商品的质量可靠&#xff0c;符合标准&#xff0c;避免虚假宣传或低劣产品的问题。 2. 诚信经营&#xff1a;尽量遵循交易…

【JavaEE初阶】 文件内容的读写 —— 数据流

文章目录 &#x1f334;数据流的概念&#x1f6a9;数据流分类 &#x1f333;字节流的读写&#x1f6eb;InputStream&#xff08;从文件中读取字节内容)&#x1f6a9;实例一&#x1f6a9;实例二&#x1f6a9;利用 Scanner 进行字符读取 &#x1f6ec;OutputStream(向文件中写内容…

数据持久化的利器,Python中的pickle模块详解

Python数据序列化和反序列化时&#xff0c;pickle模块是一个非常有用的工具。它允许将Python对象转换为字节流&#xff0c;以便存储在文件中或通过网络传输&#xff0c;然后将这些字节流重新转换回Python对象。 什么是Pickle&#xff1f; pickle是Python标准库中的一个模块&a…

2023最新最全【Android studio】安装入门教程(非常详细)手把手教你安装使用!【附安装包】

软件下载 软件&#xff1a;Android Studio版本&#xff1a;2022语言&#xff1a;英文大小&#xff1a;1G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/…

go中“哨兵错误”的由来及使用建议

“哨兵错误&#xff08;sentinel error&#xff09;”这个词的出处。之前我也只是在一些书籍和资料中见到过&#xff0c;也没深究。当这个网友问了我之后&#xff0c;就深入的翻了翻资料&#xff0c;在golang的官方博客中找到了这个词的提法&#xff0c;也算是比较官方的了吧。…

公众号快速配置AI智能问答,在公众号集成类似ChatGPT的AI聊天机器人

目录 前言 一、使用步骤 1、助手体验 2、助手训练 2、公众号集成 前言 今天无意间发现一个名为“天书AI”的产品&#xff0c;是一款AI知识库产品&#xff0c;可以集成在微信公众号消息接口中。可以将公众号基于自己的知识内容升级为智能问答工具&#xff0c;提供类似ChatGPT的…

苹果相机怎么磨皮 苹果手机怎么磨皮

相信使用苹果相机的小伙伴都有这样的疑惑&#xff0c;苹果相机怎么磨皮&#xff1f;其实可以通过相机的参数进行设置从而达到磨皮的效果&#xff0c;如果觉得相机自带的设置磨皮效果不够好&#xff0c;可以下载磨皮软件来对照片磨皮。今天的文章就来给大家介绍苹果相机怎么磨皮…