Python 使用urllib 包



文章目录

  • Python 使用urllib 包
  • 一、urllib 包介绍
  • 二、使用urllib.request模块
  • 三、使用urllib.parse模块



  在计算机网络模型中,Socket套接字编程属于底层网络协议开发的内容。虽然说编写网络程序需要从底层开始构建,但是自行处理相关协议是一件比较麻烦的事情。其实对于大多数序员来说,最常见的网络编程开发是针对应用协议进行的。在Python程序中,使用内置包 urllib 和 http 可以完成HTTP协议层程序的开发工作。在本节的内容中,将详细讲解使用包 urllib 开发Python 应用程序的知识。


一、urllib 包介绍

  在 Python程序中,urllib包主要用于处理URL (uniform resource Locator,网址)操作,使用urllib操作URL可以像使用和打开本地文件一样的操作,非常简单而又易上手。在包urllib中主要包括如下表所示的模块。

模块名称

描述

urllib.requcst

用于打开URL网址

urllib.error

用于定义常见的urllib.requcst会引发的异常

urllib.parse

用于解析URL

urllib.robotparser

用于解析robots.txt文件

二、使用urllib.request模块

  在python程序中,urllib.request模块定义了通过身份验证,重定向、cokies 等方法打开URL的方法和类。模块urllib.request中的常用方法如下所示:

  (1)方法urlopen( )
  在urllib.request模块中,方法urlopen()的功能是打开一个URL地址,语法格式如下所示:

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

 ● url: 表示要进行操作的URL地址;
 ● data: 用于向URL传递的数据,是一个可选参数;
 ● timeout: 这是一个可选参数,功能是指定一个超时时间。 如果超过该时间,任何操作都会被阻止。这个参数仅仅对 http、https 和 ftp 连接有效;
 ● context: 此参数必须是一个描述各种SSL选项的ssl.SSLContexst实例。

  方法urlopen()将返回一个HTTPResponse实例(类文件对象),可以像操作文件一样使用read()、readline()和close()等方法对URL进行操作。
  方法urlopen()能够打开url所指向的URL。如果没有给定协议或者下载方案(Scheme),或者传入了“file”方案,urlopen() 会打开个本地文件。

  (2)方法urllib.request.install_opener(opener)
  功能是安装opener作为urlopen()使用的全局URL opener,这意味着以后调用urlopen()时都会使用安装的opener对象。opener 通常是build_opener() 创建的opener对象。

  (3)方法urlib.requcst.build_opener([handler, …])
  返回OpenerDirector实例,按所给定的顺序链接处理程序。handler 可以是BaseHandler的实例或BaseHandler的子类( 在这种情况下,必须可以调用没有任何参数的构造函数)。以下类的实例将在handler 前面,除非handler包含它们的实例或它们的子类:
  ProxyHandler (如果检测到代理设置),UnknownHandler, HTTPHandler, HTTPDefault ErrorHandler, HTTPRediretHandler, FTPHandler,FileHandler, HTTPErrorProcessor。

  (4)方法urllib.request.pathname2url(path)
  功能是将路径名转换成路径,从本地语法形式的路径中使用一个 URL的路径组成部分。这不会产生一个完整的 URL。它将返回引用quote()函数的值。

  (5)方法urlilb.request.url2pathname(path)
  功能是将路径组件转换为本地路径的语法,此方法不接受一个完整的URL。这个函数使用unquote()解码的通路。

  (6)方法urllib.request.getproxies()
  功能是返回个日程表 Dictionary去代理服务器的URL映射。它首先针对所有操作系统,以不区分大小写的方式扫描环境中名为< schemes>_proxy 的变量,并且在找不到它时,从Mac OSX System Configuration for Mac中查找代理信息OS X和Windows系统注册表。如果小写和大写环境变量存在(且不同意),则首选小写。

  在下面的实例中,演示了使用urlopen()方法在百度搜索关键词中得到第一页链接的过程:

from urllib.parse import urlencode      #导入Python的内置模块
from urllib import request
import re
# #wd = input('输入一个要搜索的关键字:')
    #初始化变量wd
wd = urlencode({'wd':wd})       #对URL进行编码
url = 'http://www.baidu.com/s?' + wd           #初格化url变量
print(url)
page = request.urlopen(url).read() #打开变量url的网页并读取内容
#定义变量content,对网页进于编码处理,并实现特珠字符处理
content = (page.decode('utf-8')).replace("\n","").replace("\t","")
title = re.findall(r'<h3 class=.*?h3>',content)
#正则表达式处理(摘取需要的链接)
title = [item[item.find('href=')+6:item.find('data-')] for item in title]
title = [item.replace(' ',' ').replace('"',' ')for item in title]
#正则表达式处理
for item in title:      #遍历title
    print(item)     #打印显示遍历值

  在上述实例代码中,使用方法urlencode()对搜索的关键字进行URL编码,在拼接到百度的网址后,使用urlopen()方法发出访间请求并取得结果,最后通过将结果进行解码和正则搜索与字符串处理后输出。如果将程序中的注释去除而把其后一句注释掉, 就可以在运行时自主输入搜索的关键词。执行效果如图所示:

python 如何找关键词的同义词 python 搜索列表关键词_Python


  自主搜索的执行图:

python 如何找关键词的同义词 python 搜索列表关键词_python_02

三、使用urllib.parse模块

  在pybon程序中,urllib.parse模块提供了一些用于处理URL字符串的功能。这些功能主要是通过如下所示的方法实现的。
  (1)方法urlpasrse.urlparse()
  方法urlparse()的功能是将URL字符串拆分成前面描述的一些主要组件, 其语法结构如下所示。

urlparse (urlstr, defProtSch=None, allowFrag=None)

  方法urlparse()将urlstr 解析成一个6元组(prot_sch, net_loc, path,params, qucIy, frag)。如果在urlstr中没有提供默认的网络协议或下载方案,defProtSch会指定一个默认的网络协议。allowFrag用于标识一个 URL是否允许使用片段。例如下边是一个给定URL经urlparse()后的输出。

from urllib.parse import urlparse
result =urlparse ('http://www.python.org/doc/FAQ.html')
print(result)

python 如何找关键词的同义词 python 搜索列表关键词_python 如何找关键词的同义词_03

  (2)方法 urlparse.urlunparse( )
  方法urlunparse()的功能与方法 urlpase()完全相反,能够将经url处理的URL生成urltup这个6元组(prot_sch, net_loc, path, params, query, frag),拼接成URL并返回。可以用如下所示的方式表示其等价性:

urlunparse (urlparse(urlstr))=urlstr

  下面是使用urlunpase()的语法:

urlunparse (urltup)

  (3)方法urlparse.urljoin()
  在需要处理多个相关的URL时需要使用urljoin()方法的功能,例如在一个 Web页中可能会产生一系列页面的 URL。方法urljoin()的语法格式如下所示:

urljoin (baseurl, newurl,allowFrag=None)

  方法urljoin()能够取得根域名,并将其根路径(net_loc及其前面的完整路径,但是不包括末端的文件)与newurl连接起来。例如下面的演示过程:

from urllib.parse import urljoin
result =urljoin( 'http://PYthon.org/doc/FAQ.html','current/lib/lib.htm')

python 如何找关键词的同义词 python 搜索列表关键词_网络协议_04