Python2/3中的urllib库相关用法

urllib.request, urllib.error, urllib.parse

 

urllib2

 

urllib.request, urllib.error

 

urllib2.urlopen

 

urllib.request.urlopen

 

urllib.urlencode

 

urllib.parse.urlencode

 

urllib.quote

 

urllib.request.quote

 

urllib2.Request

 

urllib.request.Request

 

urlparse

 

urllib.parse

 

urllib.urlretrieve

 

urllib.request.urlretrieve

 

urllib2.URLError

 

urllib.error.URLError

 

cookielib.CookieJar

 

http.CookieJar

 

urllib库是用于操作URL,爬取页面的python第三方库,同样的库还有requestshttplib2

在Python2.X中,分urllib和urllib2,但在Python3.X中,都统一合并到urllib中。通过上表可以看到其中常见的变动,依据该变动可快速写出相应版本的python程序。

相对来说,Python3.X对中文的支持比Python2.X友好,所以该博客接下来通过Python3.X来介绍urllib库的一些常见用法。

发送请求

import urllib.request r = urllib.request.urlopen("")

首先导入urllib.request模块,使用urlopen()对参数中的URL发送请求,返回一个http.client.HTTPResponse对象。

urlopen()中,使用timeout字段,可设定相应的秒数时间之后停止等待响应。除此之外,还可使用r.info()、r.getcode()、r.geturl()获取相应的当前环境信息、状态码、当前网页URL。

读取响应内容

import urllib.request url = "" with urllib.request.urlopen(url) as r: r.read()

使用r.read()读取响应内容到内存,该内容为网页的源代码(可用相应的浏览器“查看网页源代码”功能看到),并可对返回的字符串进行相应解码decode()

传递URL参数

import urllib.request import urllib.parse params = urllib.parse.urlencode({'q': 'urllib', 'check_keywords': 'yes', 'area': 'default'}) url = "https://docs.python.org/3/search.html?{}".format(params) r = urllib.request.urlopen(url)

以字符串字典的形式,通过urlencode()编码,为URL的查询字符串传递数据,

编码后的params为字符串,字典每项键值对以’&’连接:’q=urllib&check_keywords=yes&area=default’

构建后的URL:https://docs.python.org/3/search.html?q=urllib&check_keywords=yes&area=default

当然,urlopen()支持直接构建的URL,简单的get请求可以不通过urlencode()编码,手动构建后直接请求。上述方法使代码模块化,更优雅。

传递中文参数

import urllib.request searchword = urllib.request.quote(input("请输入要查询的关键字:")) url = "https://cn.bing.com/images/async?q={}&first=0&mmasync=1".format(searchword) r = urllib.request.urlopen(url)

该URL是利用bing图片接口,查询关键字q的图片。如果直接将中文传入URL中请求,会导致编码错误。我们需要使用quote(),对该中文关键字进行URL编码,相应的可以使用unquote()进行解码。

定制请求头

import urllib.request url = 'https://docs.python.org/3/library/urllib.request.html' headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', 'Referer': 'https://docs.python.org/3/library/urllib.html' } req = urllib.request.Request(url, headers=headers) r = urllib.request.urlopen(req)

有时爬取一些网页时,会出现403错误(Forbidden),即禁止访问。这是因为网站服务器对访问者的Headers属性进行身份验证,例如:通过urllib库发送的请求,默认以”Python-urllib/X.Y”作为User-Agent,其中X为Python的主版本号,Y为副版本号。所以,我们需要通过urllib.request.Request()构建Request对象,传入字典形式的Headers属性,模拟浏览器。

相应的Headers信息,可通过浏览器的开发者调试工具,”检查“功能的”Network“标签查看相应的网页得到,或使用抓包分析软件FiddlerWireshark

除上述方法外,还可以使用urllib.request.build_opener()req.add_header()定制请求头,详见。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/41f9cae18e2553497d9ffce8e599b551.html