python 处理url 参数_Python 优雅的处理网页URL参数
一:前言
以前年少无知,不知道Python 官方模块里面有处理 URL的,拿起正则一顿匹配,所以在匹配url里面的页面的时候出现了问题。同时也怪我测试环境是Python3 线上生产环境是Python 2,对无序字典urlencode不一样,以及写的正则匹配问题。最后造成的结果是页面少匹配了很多页数据,最后按步测试才找到问题。
所以正确的使用URL处理模块还是方便和明智的
第三方模块有 yurl, Python3内置的有urllib.parse
Python2 处理url的模块不在一个位置, urllib里面有urlencode....,urlparse里面有urlparse,`parse_qsl....
参考链接:
二:目标
举个 利用API 获取数据的例子:
下面有个 url 和一个需要POST的参数字典,需要构造完成后发送参数获取数据,判断数据是否需要进行下一页,如果需要那么 page 部分需要提取出来后加1,再继续请求数据。
其实要做的事情很简单,提取page 加1,继续请求。
raw_url = 'http://api.xxxxxx.com/xxxxxx/xxx.json?'
param_dict = {
'id': 'xxxxx',
'card_addition': 1,
'token': 'fdflsdkr3029432',
'page': 145334,
}
三:实战代码
当时在Scrapy 的 start_requests 大致这样写的
ids = pipeline.execute()
for id in ids:
self.param_dict['id'] = id.strip()
param = urlencode(self.param_dict)
url = self.raw_url + param
yield scrapy.Request(url=url, callback=self.parse)
#
然后在 parse 里面对response做判断如果还需要对该id下的数据抓取下一页数据。
当时我直接对response.url正则匹配再加上Python3与Python 2,对无序字典urlencode不一样就出现少匹配了很多页面的问题。所以回来我利用python内置的URL 处理模块,我就改了代码。
# 解析url,获取url里面的各种组成成分
parsed_url = urlparse(response.url)
# 获取url组成成分里面的 query 参数部分
query = dict(parse_qsl(parsed_url.query))
# 获取page的数值,加1后重新urlencode 这样 下一页的 url就构造完成了
page = query.get('page')
query['page'] = int(page) + 1
param = urlencode(query)
next_url = raw_url + param
四: 后记
多多思考,多多搜索。加油!
python 处理url 参数_Python 优雅的处理网页URL参数相关推荐
- python中execute函数_Python中的函数定义与参数使用
本节知识点:(1)函数定义格式:(2)五种参数使用 函数定义 基本语法格式 def function_name( parameter_list ): return values 函数通常为小写英语单词 ...
- python一个函数可以有参数也可以没有参数_Python:有和没有关键字参数的lambda函数行为?...
我正在使用lambda函数进行tkinter的GUI编程. 最近我在实现打开文件的按钮时遇到困难: self.file="" button = Button(conf_f, tex ...
- python argv 详解_python解析传入的命令行参数 argv
python解析命令行参数主要有三种方法:sys.argv.argparse解析.getopt解析 方法一:sys.argv -- 命令行执行:python test_命令行传参.py 1,2,3 1 ...
- python opencv 摄像头亮度_Python 下opencv 应用: 摄像头参数设置
为了取得好的图片效果,我们需要设置摄像头的参数. 假如摄像流为 cap, 那么设置参数是cap.set(参数编号,参数) 获取参数值的函数是 cap.get(参数编号) 看一段摄像头参数设置读取的例 ...
- python中可选参数和可变参数_Python函数中的可变长参数详解
一.Python函数中的参数 1.使用python的函数时,有参数类别,比如位置参数.关键字参数.可变长参数 2.位置参数.关键字参数很好理解,关键是可变长参数经常能见到,但是一直没有搞懂是什么意思 ...
- python中panel不接受参数_Python基础之只接收关键字参数的函数
当我们希望函数的某些参数强制使用关键字参数时,可以将强制关键字参数放到某个*后面就能得到这种效果.比如: def recv(maxsize, *, block): """ ...
- python数组做参数_python完成数组格式的请求参数的加密计算
#输入 '''order_id:31489 join_course[0][join_tel]:13130999882 join_course[0][join_name]:任学雨 join_course ...
- python 处理url 参数_python模块 furl 使得操纵URL简单化,去除网址中参数
介绍: furl是一个小型Python库,可以轻松解析和操作URL. Python的标准urllib和 urlparse模块提供了许多与URL 相关的功能,但使用这些函数执行常见的URL 操作非常麻烦 ...
- python调用接口时传多个参数_python接口自动化11-post传data参数案例
前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...
最新文章
- [深入理解Android卷一全文-第九章]深入理解Vold和Rild
- SQL Server 2000安装指南及数据创建
- python如何保存源文件_python自动保存百度盘资源到百度盘中的实例代码
- HTML5画布如何设置线的样式?
- 2018广技师C语言专插本试题,专插本2016广技师C语言专插本考试大纲已核对.doc
- Android之在在EditText的xml里面配置了相关属性依然没有显示光标问题
- aref无效 lisp_aref无效 lisp_Common Lisp专题4:数组
- spark mapWithState 实现
- Crush Crouse 心理学笔记
- 如何进行大数据的入门级学习?
- (转)《蜗居》带给校园男女多少悲喜
- MySQL基础 - 带搜索条件的查询
- 面向数据中心,浪潮存储双剑出鞘
- 深度解密Go语言之关于 interface 的 10 个问题
- 二级分销商城系统开发软件
- [转载]推荐:互联网思维必读十本书
- 华为开发者联盟鸿蒙系统,公告 | 华为开发者联盟
- 计算机网络(自顶向下方法)-Internet概述
- 在RISC-V星光板上创建Debian系统镜像
- 随机数独的生成的实验思路概述