在做网页抓取的时候经常会遇到一个问题就是页面中的链接是相对链接,这个时候就需要对链接进行url拼接,才能得到绝对链接。

url严格按照一定的格式构成,一般为如下5个字段:

详细可参考RFC:http://tools.ietf.org/html/rfc3986

url拼接一般包含如下几种情况:

1.相对链接不包含路径,则直接在父链接所在的路径级别后面加上该相对链接即可得到拼接的url:

例如:http://www.baidu.com, 相对链接:index.html,得到:http://www.baidu.com/index.html

http://www.baidu.com/index.html, 相对链接:hello.html,得到:http://www.baidu.com/hello.html

2.相对链接包含路径,则在父链接所在的路径级别后拼接相对路径得到拼接后的url:

例如: http://www.baidu.com/movie/123.html,相对链接:/contact/index.html,得到:http://www.baidu.com/movie/contact/index.html

3.更为复杂的情况是相对路径带有../,此时将按照../得到相应的路径再拼接url:

例如:http://www.baidu.com/movie/123.html,相对链接:../contact/index.html,得到:http://www.baidu.com/contact/index.html

如果html头部 有 <base>标记,例如:<base href="http://www.father.com/" />则该页面上的基准URL都以此为准,不考虑其父链的情况。

python中的常用的url拼接库为urlparse.urljoin(base, url, flag)

此外,对于网页中的图片链接的拼接,可采用如下方式:

1.如果图片链接为完整连接,则不需要拼接;

2.如果网页中的图片连接以'/'开头,则通过domain拼接:

img = urlparse.urljoin(base_url, img)

3.如果网页中的图片连接不以'/'开头,则通过当前页面url拼接:

img = urlparse.urljoin(cur_url, img)

同样的方式适用于网页中的anchor链接的拼接。

url拼接的更多相关文章

  1. php 对url 操作类:url拼接、get获取页面、post获取页面(带传参)

    /* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $ ...

  2. Python相对完美的URL拼接函数

    首先说下什么叫URL拼接,我们有这么一个HTML片段:   <a href="../../a.html">click me</a> 做为一只辛苦的爬虫,我们 ...

  3. url拼接参数格式

    在一些情况下,需要直接往url上拼接请求参数. http://www.yanggb.com?flag=1&type=normal&role=customer 通过上面的例子就可以看出, ...

  4. Ajax获取接口数据,url拼接参数跳转页面,js获取上一级页面参数给本页面

    1.Ajax获取接口数据 function demo(){ //假设请求参数 var requestBody = [{ "name":"zhang", &quo ...

  5. 接口测试get请求url拼接函数(python)

    get请求地址一般是 协议+域名+端口+路径+参数,除了协议和域名其他均可为空.  http(s)://domain:port/path?key1=value1&key2=value2& ...

  6. 相对URL拼接为绝对URL的过程

    URL有两种方式:绝对的和相对的. 绝对URL中包含有访问资源的所需的全部信息 举一个例子: <HTML> <HEAD><TITLE>Joe's Tools< ...

  7. 关于url拼接传参数和利用view的字典传参数时,模板获取数据的方式问题

    url = "{% url 'dashboard:internship-theme-stat' %}?teacher_name="+teacher_name+"& ...

  8. 记录下url拼接的多条件筛选js

    本着为提高工作效率百度或者google这些代码发现拿过来的都不好用,然后自己写了个,写的一般但记录下以后再优化 <html> <head> <script> $(f ...

  9. %3f URL --> '?'拼接引发的问题

    转载自:https://www.reddit.com/r/swift/comments/2w19kp/how_do_you_send_a_through_nsmutableurlrequest/ ho ...

随机推荐

  1. Yii框架2.0的 验证码

    最近看了一个Yii的教程视频,是按1.1的版本讲的,我想用Yii2.0的框架也参考他的学习开发下,结果发现好多不一样的,现在就说说验证码的事 首先加入一个actions 做验证码图片的显示,实际事调用 ...

  2. 不得不知的Excel技巧

    1.超链接 选中一个格右击选择超链接. 2.求和 选择一个格点击开始中的求和按钮并拖动求和区域. 3.冻结 冻结一行,选择一行区域,选择开始菜单中的冻结窗格. 冻结上面的行和左边的行,选择夹角的格并点 ...

  3. HDFS基本命令行操作及上传文件的简单API

    一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据 ...

  4. RESTful API 设计最佳实践【转】

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,后面API和RESTful API 一个意思)如何设计的文章,然而却没有一个“万能”的设计标准:如何鉴权?API格式如何?你的API ...

  5. Python并行编程(八):with语法

    1.基本概念 当有两个相关的操作需要在一部分代码块前后分别执行的时候,可以使用with语法自动完成.同时,使用with语法可以在特定的地方分配和释放资源,因此,with语法也叫作"上下文管理 ...

  6. foo ?

    我们经常看到一些基础教程,面试题中经经常使用foo来命名,甚至有时候我们也会用过,可是你是否又知道foo是什么意思?(实际上,知道不知道又不会对你编码有不论什么影响~) 从编程黑马的王轶男的话来解释, ...

  7. 006-Hadoop Hive sql语法详解1-数据结构和Hive表建立

    1.认识hive:  Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表, ...

  8. HDU1003:Max Sum(简单dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题意一目了然就不说了,算法是从左往右扫,一个暂时保存结果的值,如果区间结果<0,那么就更改左右 ...

  9. 子集和问题(应用--换零钱)POJ2229:Sumsets

    我一直在纠结换零钱这一类型的题目,今天好好絮叨一下,可以说他是背包的应用,也可以说他是单纯的dp.暂且称他为dp吧. 先上一道模板题目. sdut2777: 小P的故事——神奇的换零钱 题目描述 已知 ...

  10. postgresql 建模文件 LDM 转成PDM 生成 SQL问题

    LDM 转成 PDM (Tool --- GPDM ) 生成 SQL,查看全部SQL 详细步骤见下图. 1.postgresql 没有 VARCHAR2 只有 VARCHAR. 2.LDM 生成 PD ...