在做网页抓取的时候经常会遇到一个问题就是页面中的链接是相对链接,这个时候就需要对链接进行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. 权限认证与授权(Shrio 框架)

    权限概述 认证: 系统提供的用于识别用户身份的功能, 通常登录功能就是认证功能; -- 让系统知道你是谁 授权: 系统授予用户可以访问哪些功能的证书. -- 让系统知道你能做什么! 常见的权限控制方式 ...

  2. golang 中的定时器(timer),更巧妙的处理timeout

    今天看到kite项目中的一段代码,发现挺有意思的. // generateToken returns a JWT token string. Please see the URL for detail ...

  3. jupter nootbok 快捷键、NumPy模块、Pandas模块初识

    jupter nootbok 快捷键 插入cell:a b 删除cell:x cell模式的切换:m:Markdown模式 y:code模式 运行cell:shift+enter tab:补全 shi ...

  4. Mybatis框架学习总结-使用Mybatis对表执行CRUD操作

    使用MyBatis对表执行CRUD操作——基于XML的实现 1.创建(create)用户:在userMapper.xml文件中增加: <!-- 创建用户Create --> <ins ...

  5. Python之配置文件读写

    ConfigParser模块 一.创建配置文件 在D盘建立一个配置文件,名字为:test.ini 内容如下: [baseconf] host=127.0.0.1 port=3306 user=root ...

  6. PAT 1093 Count PAT's[比较]

    1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...

  7. H5移动端的一些坑、、、

    H5项目常见问题及注意事项 Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 //一.HTML页面结构 <meta name="viewport" co ...

  8. (转载)sql注入实战 mysql篇

    出现的关键名词有: UNION  SELECT   load_file   hex 为了方便说明我们先创建两个表:hehe和heihei,很明显它们一个拥有2列属性,一个拥有3列属性 ======== ...

  9. JAVA垃圾回收机

    垃圾回收基本算法 串型回收和并行回收 串行回收始终在一个CPU上执行回收操作.并行回收则将回收任务分为好几步,每步使用不同的CPU执行,这样加快了执行速度,有点像流水线作业. 并发执行和暂停应用程序 ...

  10. Webpack+React+ES6 最新环境搭建和配置(2017年)

    刚刚学习React,发现React在ES6下的语法才是本体,结合ES6新的语言特性,使组件化开发显得更加直观.而且现在的Angular2也开始使用支持强类型的TypeScript,转译(transpi ...