url拼接
在做网页抓取的时候经常会遇到一个问题就是页面中的链接是相对链接,这个时候就需要对链接进行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拼接的更多相关文章
- php 对url 操作类:url拼接、get获取页面、post获取页面(带传参)
/* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $ ...
- Python相对完美的URL拼接函数
首先说下什么叫URL拼接,我们有这么一个HTML片段: <a href="../../a.html">click me</a> 做为一只辛苦的爬虫,我们 ...
- url拼接参数格式
在一些情况下,需要直接往url上拼接请求参数. http://www.yanggb.com?flag=1&type=normal&role=customer 通过上面的例子就可以看出, ...
- Ajax获取接口数据,url拼接参数跳转页面,js获取上一级页面参数给本页面
1.Ajax获取接口数据 function demo(){ //假设请求参数 var requestBody = [{ "name":"zhang", &quo ...
- 接口测试get请求url拼接函数(python)
get请求地址一般是 协议+域名+端口+路径+参数,除了协议和域名其他均可为空. http(s)://domain:port/path?key1=value1&key2=value2& ...
- 相对URL拼接为绝对URL的过程
URL有两种方式:绝对的和相对的. 绝对URL中包含有访问资源的所需的全部信息 举一个例子: <HTML> <HEAD><TITLE>Joe's Tools< ...
- 关于url拼接传参数和利用view的字典传参数时,模板获取数据的方式问题
url = "{% url 'dashboard:internship-theme-stat' %}?teacher_name="+teacher_name+"& ...
- 记录下url拼接的多条件筛选js
本着为提高工作效率百度或者google这些代码发现拿过来的都不好用,然后自己写了个,写的一般但记录下以后再优化 <html> <head> <script> $(f ...
- %3f URL --> '?'拼接引发的问题
转载自:https://www.reddit.com/r/swift/comments/2w19kp/how_do_you_send_a_through_nsmutableurlrequest/ ho ...
随机推荐
- ajax数据提交数据的三种方式和jquery的事件委托
ajax数据提交数据的三种方式 1.只是字符串或数字 $.ajax({ url: 'http//www.baidu.com', type: 'GET/POST', data: {'k1':'v1'}, ...
- react 将字符串解析为markdown
react 中有许多组件支持把字符串转化为markdown,并以html的形式展示出来.这里我试用了 react-markdown 和 hyperdown 两个库,发现hyperdown比较好,因为r ...
- 机房断电导致MySQL同步1594错误
1.错误信息 Last_IO_Error: Got fatal error from master when reading data from binary log: ' at 208645951. ...
- HTML容易遗忘内容(二)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> ...
- JSP学习(第二课)
把GET方式改为POST在地址栏上就不会显示. 发现乱码了,设置编码格式(这个必须和reg.jsp中page的charset一致): 但是注意了!我们传中文名,就会乱码: 通过get方式提交的请求无 ...
- java-mybaits-00203-DAO-mapper代理开发方法,多参数【推荐】
程序员只需要mapper接口(相当 于dao接口) 不需要写具体实现类,mapper已经代理完成,mybatis才有的 一.mapper代理开发方法(建议使用) 程序员在编写mapp ...
- CCoolBar 的替代方案 CDockablePane。
(阅读受众需有一定MFC知识储备.) (技术支持:http://www.cnblogs.com/shuhaoc/archive/2011/06/26/cdockableform.html) 在以往很多 ...
- flask自定义session
根据内置session原理可以进行session的定制: #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json fr ...
- vertical-align和line-height的深入应用
vertical-align和line-height的深入应用 本文的重点是了解vertical-align和line-height的使用 涉及到的名词:基线,底端,行内框,行框,行间距,替换元素及非 ...
- AtCoder Regular Contest 080 C - 4-adjacent
地址:http://arc080.contest.atcoder.jp/tasks/arc080_a 题目: C - 4-adjacent Time limit : 2sec / Memory lim ...