码迷,mamicode.com
首页 > Web开发 > 详细

scrapy中的canonicalize_url【转】

时间:2016-01-24 23:40:43      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

转自:http://www.leyle.com/archives/canonicalize_url.html

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

为什么需要格式化 url?

比如下面几个url:

  1. http://www.example.com/path/xxx?name=leyle&passwd=leyle
  2. http://www.example.com/path/xxx?passwd=leyle&name=leyle

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

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

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

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

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

scrapy中的canonicalize_url【转】

标签:

原文地址:http://www.cnblogs.com/chybot/p/5156182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!