在urllib库的使用过程中,会在请求发送之前按照发送请求的方式进行编码处理,来使得传递的参数更加的安全,也更加符合模拟浏览器发送请求的形式。这就需要用urllib中的parse模块。parse的使用主要提供了输送连接的编码解码处理。对于不同的请求发送方式,parse的使用方法不是很相同,下面是我的学习笔记。


  GET方法

  parse的使用流程大体就是在发送请求的时候将发送的内容使用字典封装起来,然后按照拼凑的方式将查询的关键信息拼凑到链接后,然后发送请求。如下所示:

1 d = {
2 'q':'中国'
3 }
4 u = parse.urlencode(d) #将传递的参数进行编码,编码后的格式是按照字节以%包裹的形式进行传递的.
5 #值得注意的是,当传递的参数是汉字时,默认是按照‘utf-8’的格式进行编码的,
6 #比如汉字中国的编码为%E4%B8%AD%E5%9B%BD
7 url = '{}?{}'.format(base_url,u)

  完整的GET方法发送请求请参考下面这个小例子。

 1 '''
2 @Description: url编码和GET请求
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-02 15:44:59
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-02 20:29:00
8 '''
9 ##在使用GET方法进行传递参数的过程中,我们一般会进行一些简单的编码操作用来保证参数传递的保密性。在urllib.parse中提供了这样一种方法进行编码与解码
10
11 from urllib import parse
12 from urllib.request import urlopen,Request
13 import random
14
15 #http://www.bing.com/search?q=中国
16 base_url = 'http://www.bing.com/search'
17
18 #parse在编码时支持的是字典格式,可以将字典中的键值对按照随机的形式进行排序,拼凑成一个类似于链接格式
19 d = {
20 'q':'中国'
21 }
22 u = parse.urlencode(d) #将传递的参数进行编码,编码后的格式是按照字节以%包裹的形式进行传递的.
23 #值得注意的是,当传递的参数是汉字时,默认是按照‘utf-8’的格式进行编码的,
24 #比如汉字中国的编码为%E4%B8%AD%E5%9B%BD
25 url = '{}?{}'.format(base_url,u) #设置两个字典,将得到的url拼凑在一起
26
27 print(url)
28 u_url = parse.unquote(url) #将编码后的结果进行解码
29 print(u_url)
30
31 #在编码或者解码结束后,会进行连接的传递访问,这就运用到urllib.request模块,这部分常用的知识点上一篇博客已经总结过了
32 ua_list = [
33 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
34 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
35 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
36 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
37 ]
38 #随机pick one
39 ua = random.choice(ua_list)
40 request = Request(url,headers={
41 'User-agent':ua
42 })
43 # response = urlopen(url,timeout=3) #GET
44 response = urlopen(request,timeout=3)
45 #将使用GET方法得到的信息储存到任意文件中
46 with response:
47 with open('bing.txt','wb') as f:
48 f.write(response.read())
49
50 print('成功!')

  结果可以参考下面的信息:


  POST方法

  使用POST方法的形式就在于我们不会在发送请求的时候将请求信息显示出来,而是在表单提交的时候将请求信息隐藏起来进行发送。而使用编码方式进行发送,也会提高请求发送过程中的安全性。与GET方法不同发是,在请求返回的过程中,会可能返回一些JSON格式的数据,所以在处理这些数据的过程中,需要将JSON数据转换为字典形式。

  这里给大家推荐一个测试的网址:http://httpbin.org  这个网址中很多的关于spider发送请求的测试,很实用。

  post方法发送请求可以参考下面这个小例子。

 1 '''
2 @Description: URL编码和POST请求
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-02 20:18:08
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-02 20:54:28
8 '''
9
10 #不同于GET方法请求,POST方法进行数据请求的时候是不能直接看到传递的参数的,并且POST方法返回的数据通常是JOSN形式的,所以使用不同的方式进行传递
11 from urllib import parse
12 from urllib.request import urlopen,Request
13 import random
14 import simplejson
15
16
17 url = 'http://httpbin.org/post'
18
19 d = {
20 'name':'张三!@#$%^',
21 'age':'11'
22 }
23 data = parse.urlencode(d) #使用POST方式传递数据,相当于将data数据放置到body中进行传输
24
25
26
27 ua_list = [
28 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
29 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
30 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
31 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
32 ]
33 #随机pick one
34 ua = random.choice(ua_list)
35 request = Request(url,headers={
36 'User-agent':ua
37 })
38 #这里使用urlopen的第二个参数进行数据的传递
39 response = urlopen(request,data =data.encode(),timeout=3)
40 #将使用GET方法得到的信息储存到任意文件中
41 with response:
42 text = response.read()
43 print(type(text))
44 d = simplejson.loads(text)
45 print(d)
46 print(type(d))
47
48 print('成功!')

  执行的结果可以参考下面的内容:

urllib库中的URL编码解码和GETPOST请求的更多相关文章

  1. Delphi中处理URL编码解码

    Delphi中处理URL编码解码 一.URL简单介绍     URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...

  2. 详解JavaScript中的Url编码/解码,表单提交中网址编码

    本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...

  3. ASP.NET中的URL编码解码(转)

    在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗?测试: string file="文件上(传)篇.doc";string Server_UrlEncode=Server ...

  4. 「Python 编程」编码实现网络请求库中的 URL 解析器

    摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...

  5. cookie的中文乱码问题【URL编码解码】

    先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...

  6. python中的URL编码和解码

    python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...

  7. ASP.NET中Url编码解码

    今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...

  8. WebApi中对请求参数和响应内容进行URL编码解码

    项目经测试,发现从IE提交的数据,汉字会变成乱码,实验了网上很多网友说的给ajax加上contentType:"application/x-www-form-urlencoded; char ...

  9. Python学习之==>URL编码解码&if __name__ == '__main__'

    一.URL编码解码 url的编码解码需要用到标准模块urllib中的parse方法 from urllib import parse url = 'http://www.baidu.com?query ...

随机推荐

  1. AI推理与Compiler

    AI推理与Compiler AI芯片编译器能加深对AI的理解, AI芯片编译器不光涉及编译器知识,还涉及AI芯片架构和并行计算如OpenCL/Cuda等.如果从深度学习平台获得IR输入,还需要了解深度 ...

  2. CVPR2020最新论文扫描盘点(上)

    CVPR2020最新论文扫描盘点(上) 最近计算机视觉三大顶会之一CVPR2020接收结果已经公布,一共有1470篇论文被接收,接收率为22%,相比去年降低3个百分点,竞争越来越激烈.这里整理来自Tw ...

  3. 3D-LaneNet:端到端三维多车道检测ICCV2019

    3D-LaneNet:端到端三维多车道检测ICCV2019 3D-LaneNet: End-to-End 3D Multiple Lane Detection 论文链接: http://openacc ...

  4. MySQL必知必会笔记——查询的基础知识

    查询基础知识 第七章 数据过滤 组合where子句 MySQL允许给出多个WHERE子句.这些子 句可以两种方式使用:以AND子句的方式或OR子句的方式使用. AND操作符 可使用AND操作符给WHE ...

  5. 码农飞升记-04-OracleJDK 与 OpenJDK 的区别和联系以及 OracleJDK builds 与其他 OpenJDK builds 的选择问题

    在前两篇 OracleJDK是什么?OracleJDK的版本怎么选择? 和 OpenJDK是什么? 中分别介绍了 OracleJDK 和 OpenJDK 的来历以及概念,那可能就有小伙伴要问了:那我到 ...

  6. windows10环境下gcc环境变量的配置

    1.首先打开控制面板-系统和安全-系统-高级系统设置,打开环境变量 2.在用户变量里找到Path,点击编辑,点击新建,找到Qt的tools安装目录并将目录复制进去保存,我的目录是C:\Qt\Qt5.9 ...

  7. Idea的安装破解及配置

    安装激活 30天试用无线版 博客园下载地址:https://files.cnblogs.com/files/blogs/482725/无限30天试用插件.zip 百度云下载链接: https://pa ...

  8. csp-s模拟测试44「D·E·F」

    用心出题,用脚造数据 乱搞场 1 #include<bits/stdc++.h> 2 #define re register 3 #define int long long 4 #defi ...

  9. 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践

    目录 系列文章 数据传输对象 输入DTO最佳实践 不要在输入DTO中定义不使用的属性 不要重用输入DTO 输入DTO中验证逻辑 输出DTO最佳实践 对象映射 学习帮助 系列文章 基于ABP落地领域驱动 ...

  10. 高性能的Redis数据结构小结

    一.概述 Redis 作为一种 KV 缓存服务器,有着极高的性能,相对于 Memcache,Redis 支持更多种数据类型,因此在业界应用广泛. 记得刚毕业那会参加面试,面试官会问我 Redis 为什 ...