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

  对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。本文将详细介绍如何利用Python抓取和解析网页。首 先,我们介绍一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块,然后,我们论述如何使用Python模块来迅速解析在HTML文 件中的数据,从而处理特定的内容,如链接、图像和Cookie等。最后,我们会给出一个规整HTML文件的格式标签的例子,通过这个例子您会发现使用 python处理HTML文件的内容是非常简单的一件事情。

一、解析URL

通过Python所带的urlparse模块,我们能够轻松地把URL分解成元件,之后,还能将这些元件重新组装成一个URL。当我们处理HTML 文档的时候,这项功能是非常方便的。

import urlparse
  parsedTuple = urlparse.urlparse("http://www.google.com/search?hl=en&q=urlparse&btnG=Google+Search")
  unparsedURL = urlparse.urlunparse((URLscheme, URLlocation, URLpath, ‘‘, ‘‘, ‘‘))
  newURL = urlparse.urljoin(unparsedURL,"/module-urllib2/request-objects.html")

 

  函数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基地址以字符/结尾。

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

  import urlparse

  URLscheme = "http"

  URLlocation = "www.python.org"

  URLpath = "lib/module-urlparse.html"

  modList = ("urllib", "urllib2", \

  "httplib", "cgilib")

  #将地址解析成组件

  print "用Google搜索python时地址栏中URL的解析结果"

  parsedTuple = urlparse.urlparse(

  "http://www.google.com/search?

  hl=en&q=python&btnG=Google+Search")

  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

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

  用Google搜索python时地址栏中URL的解析结果

  (‘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

二、打开HTML文档

  上面介绍了如何解析页面的URL,现在开始讲解如何通过URL打开一个网页。实际上,Python所带的urllib和urllib2这两个模块为我们提供了从URL打开并获取数据的功能,当然,这包括HTML文档。

  import urllib

  u = urllib.urlopen(webURL)

  u = urllib.urlopen(localURL)

  buffer = u.read()

  print u.info()

  print "从%s读取了%d 字节数据.\n" % (u.geturl(),len(buffer) )

  若要通过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位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。

  import urllib

  webURL = "http://www.python.org"

  localURL = "index.html"

  #通过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) )

上面代码的运行结果如下所示:

  Date: Fri, 26 Jun 2009 10:22:11 GMT

  Server: Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.3 Python/2.5.2

  Last-Modified: Thu, 25 Jun 2009 09:44:54 GMT

  ETag: "105800d-46e7-46d29136f7180"

  Accept-Ranges: bytes

  Content-Length: 18151

  Connection: close

  Content-Type: text/html

  从http://www.python.org读取了18151 字节数据.

  Content-Type: text/html

  Content-Length: 865

  Last-modified: Fri, 26 Jun 2009 10:16:10 GMT

  从index.html读取了865 字节数据.

三、小结

  对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。本文中,我们介绍了一个可以帮助简化打开位于本地和Web 上的HTML文档的Python模块。在下篇中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的内容,如链接、图 像和Cookie等。

时间: 2024-10-17 21:52:03

Python中的urlparse、urllib抓取和解析网页(一)的相关文章

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

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文将详细介绍如何利用Python抓取和解析网页.首 先,我们介绍一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块,然后,我们论述如何使用Python模块来迅速解析在HTML文 件中的数据,从而处理特定的内容,如链接.图像和Cookie等.最后,

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

一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTMLParser模块后,这项任务将变得易如反掌.首先,我们需要定义 一个新的HTMLParser类,以覆盖handle_starttag()方法,我们将使用这个方法来显示所有标签的HRef属性值. 定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象.然后,就可以使用u

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

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

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

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文上篇中,我们介绍了一个可以帮助简化打开 位于本地和Web上的HTML文档的Python模块.在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的 内容,如链接.图像和Cookie等.同时还会介绍如何规范HTML文件的格式标签

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

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文上篇中,我们介绍了一个可以帮助简化打开 位于本地和Web上的HTML文档的Python模块.在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的 内容,如链接.图像和Cookie等.同时还会介绍如何规范HTML文件的格式标签

python中用beautifulSoup+urlib2 安装、抓取和解析网页,以及解析shtml

安装 Beautiful Soup? 如果你用的是新版的Debain或ubuntu,那么可以通过系统的软件包管理来安装: $ apt-get install Python-bs4 Beautiful Soup 4 通过PyPi发布,所以如果你无法使用系统包管理安装,那么也可以通过 easy_install 或 pip 来安装.包的名字是beautifulsoup4 ,这个包兼容Python2和Python3. $ easy_install beautifulsoup4 $ pip install

用python做网页抓取与解析入门笔记[zz]

(from http://chentingpc.me/article/?id=961) 事情的起因是,我做survey的时候搜到了这两本书:Computational Social Network Analysis和Computational Social Network,感觉都蛮不错的,想下载下来看看,但是点开网页发现这个只能分章节下载,晕,我可没时间一章一章下载,想起了迅雷的下载全部链接,试试看,果真可以把他们一网打尽,但是,sadly,迅雷下载的时候,文件名没办法跟章节名对应起来,晕,我可

Python爬虫实战四之抓取淘宝MM照片

福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 最新动态 更新时间:2015/8/2 最近好多读者反映代码已经不能用了,原因是淘宝索引页的MM链接改了.网站改版了,URL的索引已经和之前的不一样了,之前可以直接跳转到每个MM的个性域名,现在中间加了一个跳转页,本以为可以通过这个页面然后跳转到原来的个性域名,而经过一番折腾发现,这个跳转页中的内容是JS动态生成的,所以不能用Urllib库来直接抓取了,本篇就只提供学习思路,代码不能继续用了. 之后博主会利用其它方

python爬虫beta版之抓取知乎单页面回答(low 逼版)

闲着无聊,逛知乎.发现想找点有意思的回答也不容易,就想说要不写个爬虫帮我把点赞数最多的给我搞下来方便阅读,也许还能做做数据分析(意淫中--) 鉴于之前用python写爬虫,帮运营人员抓取过京东的商品品牌以及分类,这次也是用python来搞简单的抓取单页面版,后期再补充哈. #-*- coding: UTF-8 -*- import requests import sys from bs4 import BeautifulSoup #------知乎答案收集---------- #获取网页body