一、解析URL

函数urlparse(urlstring [, default_scheme [, allow_fragments]])的作用是将URL分解成不同的组成部分,它从urlstring中取得URL,并返回元组 (scheme, netloc, path, parameters, query, fragment)。注意,返回的这个元组非常有用,例如可以用来确定网络协议(HTTP、FTP等等 )、服务器地址、文件路径,等等。

  函数urlunparse(tuple)的作用是将URL的组件装配成一个URL,它接收元组(scheme, netloc, path, parameters, query, fragment)后,会重新组成一个具有正确格式的URL,以便供Python的其他HTML解析模块使用。

  函数urljoin(base, url [, allow_fragments]) 的作用是拼接URL,它以第一个参数作为其基地址,然后与第二个参数中的相对地址相结合组成一个绝对URL地址。函数urljoin在通过为URL基地址 附加新的文件名的方式来处理同一位置处的若干文件的时候格外有用。需要注意的是,如果基地址并非以字符/结尾的话,那么URL基地址最右边部分就会被这个 相对路径所替换。比如,URL的基地址为Http://www.testpage.com/pub,URL的相对地址为test.html,那么两者将合 并成http://www.testpage.com/test.html,而非http://www.testpage.com/pub /test.html。如果希望在该路径中保留末端目录,应确保URL基地址以字符/结尾。

  下面是上面几个函数的详细一点的用法举例:

# -*- coding: UTF-8 -*-
__author__ = 'paul'
import urlparse
URLscheme = "http"
URLlocation = "www.python.org"
URLpath = "lib/module-urlparse.html"
modList = ("urllib", "urllib2", "httplib", "cgilib")
print u"用Google搜索python时地址栏中URL的解析结果"
#parsedTuple = urlparse.urlparse("http://www.google.com/search?hl=en&q=python&btnG=Google+Search")
parsedTuple = urlparse.urlparse("https://www.google.com.hk/?gws_rd=cr,ssl#newwindow=1&safe=strict&q=python")
print parsedTuple#将组件反解析成URL
print "\反解析python文档页面的URL"
unparsedURL = urlparse.urlunparse( \
(URLscheme, URLlocation, URLpath, '', '', ''))
print "\t" + unparsedURL#将路径和新文件组成一个新的URL
print "\n利用拼接方式添加更多python文档页面的URL"
for mod in modList:
newURL = urlparse.urljoin(unparsedURL, \
"module-%s.html" % (mod))
print "\t" + newURL#通过为路径添加一个子路径来组成一个新的URL print "\n通过拼接子路径来生成Python文档页面的URL"
newURL = urlparse.urljoin(unparsedURL,
"module-urllib2/request-objects.html")
print "\t" + newURL

 

 

上述代码的执行结果如下所示:

  ('http', 'www.google.com', '/search', '',

  'hl=en&q=python&btnG=Google+Search', '')

  反解析python文档页面的URL

  http://www.python.org/lib/module-urlparse.html

  利用拼接方式添加更多python文档页面的URL

  http://www.python.org/lib/module-urllib.html

  http://www.python.org/lib/module-urllib2.html

  http://www.python.org/lib/module-httplib.html

  http://www.python.org/lib/module-cgilib.html

  通过拼接子路径来生成Python文档页面的URL

  http://www.python.org/lib/module-urllib2/request-objects.html

若要通过urllib模块中的urlopen(url [,data])函数打开一个HTML文档,必须提供该文档的URL地址,包括文件名。函数urlopen不仅可以打开位于远程web服务器上的文件,而 且可以打开一个本地文件,并返回一个类似文件的对象,我们可以通过该对象从HTML文档中读出数据。

  一旦打开了HTML文档,我们就可以像使用常规文件一样使用read([nbytes])、readline()和readlines()函数来对文件进行读操作。若要读取整个HTML文档的内容的话,您可以使用read()函数,该函数将文件内容作为字符串返回。

  打开一个地址之后,您可以使用geturl()函数取得被获取网页的真正的URL。这是很有用的,因为urlopen(或使用的opener对象)也许会伴随一个重定向。获取的网页URL也许和要求的网页URL不一样。

  另一个常用的函数是位于从urlopen返回的类文件对象中的info()函数,这个函数可以返回URL位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。

# -*- coding: UTF-8 -*-
__author__ = 'paul'
import urllib
webURL = "http://www.163.com"
localURL = r"594915.html"
print localURL
#通过URL打开远程页面
u = urllib.urlopen(webURL)
buffer = u.read()
print u.info()
print "从%s读取了%d 字节数据.\n" % (u.geturl(),len(buffer) )
#通过URL打开本地页面
u = urllib.urlopen(localURL)
buffer = u.read()
print u.info()
print "从%s读取了%d 字节数据.\n" % (u.geturl(),len(buffer) )

 

【python】使用Python中的urlparse、urllib抓取和解析网页的更多相关文章

  1. 使用Python中的urlparse、urllib抓取和解析网页(一)(转)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  2. Python中的urlparse、urllib抓取和解析网页(一)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  3. python threading模块中对于信号的抓取

    最近的物联网智能网关(树莓派)项目中遇到这样一个问题:要从多个底层串口读取发来的数据,并且做出相应的处理,对于每个串口的数据的读取我能想到的可以采用两种方式: 一种是采用轮询串口的方式,例如每3s向每 ...

  4. 使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)(转)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  5. 【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies

    一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTM ...

  6. Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  7. c# 抓取和解析网页,并将table数据保存到datatable中(其他格式也可以,自己去修改)

    使用HtmlAgilityPack 基础请参考这篇博客:https://www.cnblogs.com/fishyues/p/10232822.html 下面是根据抓取的页面string 来解析并保存 ...

  8. Jsoup抓取、解析网页和poi存取excel综合案例——采集网站的联系人信息

    需求:采集网站中每一页的联系人信息 一.创建maven工程,添加jsoup和poi的依赖包 <!-- https://mvnrepository.com/artifact/org.apache. ...

  9. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

随机推荐

  1. 20145221 《Java程序设计》第八周学习总结

    20145221 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章部分 - 通用API 通用API 日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用到日志信息 日 ...

  2. Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...

  3. spark-sql执行流程分析

    spark-sql 架构 图1 图1是sparksql的执行架构,主要包括逻辑计划和物理计划几个阶段,下面对流程详细分析. sql执行流程 总体流程 parser:基于antlr框架对 sql解析,生 ...

  4. scrapy中的canonicalize_url【转】

    转自:http://www.leyle.com/archives/canonicalize_url.html 思考一下:对url进行规范化处理是否是必须的?因为这一步处理涉及到编码转换,对于一个网页的 ...

  5. 使用IDEA2017创建java web +maven项目

    1.首先,提前准备的东西:我使用的是IDEA2017,tomcat7,jdk1.:请将这些软件安装完成,环境变量配置完成,如何配置以及安装我就不复述了,百度上一堆一堆的,比我知道的详细多了. 2.下面 ...

  6. java 普通容器,同步容器,并发容器,同步工具

    同步容器,如HashTable,提供独占访问. 并发容器,ConcurrentHashMap,有着更好的并发性能,但是不能独占访问. --putIfAbsent 同步工具: 闭锁:CountDownL ...

  7. 查看nginx版本和安装的模块

    查看nginx版本 # nginx -v nginx version: nginx/1.12.2 查看nginx配置了哪些模块 # nginx -V nginx version: nginx/1.12 ...

  8. vim 安装Vundle.vim

    1.下载 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 2.配置vimrc set no ...

  9. DWZ 框架详解

    这是一个智障的框架,能别用就别用.

  10. [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'number primary key,

    如题,mysql建表语句报错 分析:就是一个语法错误,具体问题具体分析 本例中,直接赋值过来的 sql建表语句,直接粘贴到mysql数据库运行,报错! 经查询,mysql中 number类型的定义有如 ...