博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scrapy中的canonicalize_url【转】
阅读量:7104 次
发布时间:2019-06-28

本文共 667 字,大约阅读时间需要 2 分钟。

转自:

思考一下:对url进行规范化处理是否是必须的?因为这一步处理涉及到编码转换,对于一个网页的新链发现来说是比较耗时的。

为什么需要格式化 url?

比如下面几个url:

实质上请求的内容是一样的,但是参数的顺序却是可以不一样的,所以,我们需要一个规则,让所有的 url 都按照这个规则来格式化,这样更方便我们判断 url 指向的内容是否相同,也可以对 url 进行去重处理。

在 scrapy 中,格式化 url 的函数是 scrapy.utils.url.canonicalize_url(),在 scrapy 中,按照 url 的构成方法,对 url 中的构成数据进行了重新排列,关于 url 的信息,可以参考 

所以整个函数的实现过程就是:

  1. 分割 url,提取出来 url 中各个部分;这里使用的是 urlparse.urlparse(url) 来实现;
  2. 对于 query 的内容,对他们进行分割(urlparse.parse_qsl(query, True)),同时保留空参数,然后进行排序后再重新拼接成查询字符串;urllib.urlencode(query_list);
  3. 路径处理,根据百分号编码相关规则进行编码与转义;
  4. 处理是否保留页面内的导航定位('#'),默认情况下是不保留;

经过上面的处理后,再通过 urlparse.urlunparse 反向拼接成新的 url。到此处是,整个 url 格式化过程就完成了。

转载于:https://www.cnblogs.com/chybot/p/5156182.html

你可能感兴趣的文章
Git常用命令及日常问题集锦
查看>>
强技术推动高需求,但是未来市值将缩水?看国外分析师如何评价苹果
查看>>
深入 Nginx 之配置篇
查看>>
程序员编程10大哲理!血的教训,后人警惕!
查看>>
数据库事务的四种隔离级别
查看>>
关于Vue.nextTick()的使用
查看>>
WPF项目示例1:入门
查看>>
Dubbo 新编程模型之注解驱动
查看>>
从template到DOM(Vue.js源码角度看内部运行机制)
查看>>
Sequelize 中文文档 v4 - Working with legacy tables - 使用遗留表
查看>>
《Java Concurrency in Practice》中三个VehicleTracker例子的分析
查看>>
spring-springmvc项目介绍
查看>>
为什么要从0开始计数
查看>>
ThinkJS 3.0 正式版发布!
查看>>
js简单前端模板引擎实现
查看>>
初识Java(译)
查看>>
MegaTags:网站META标签生成器
查看>>
PHP图片处理之二维码加文字
查看>>
树莓派新系统用户配置
查看>>
格式化创建文件系统、内核支持的文件系统、指定卷标、查看超级块信息、文件系统修复...
查看>>