Python 爬虫 --- urllib

Posted 路漫漫 其修远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 爬虫 --- urllib相关的知识,希望对你有一定的参考价值。

对于互联网数据,Python 有很多处理网络协议的工具,urllib 是很常用的一种。

一、urllib.request,request 可以很方便的抓取 URL 内容。

  • urllib.request.urlopen(url)  返回请求 url 后的二进制对象·

    参数:url=‘http://www.baidu.com’,请求的 url。

       data=None,请求的数据,可有可无,bytes 类型。

       timeout=3,设置访问超时时间,可有可无

       cafile=None,HTTPS 请求 CA 证书

       capath=None,CA 证书 path

       context=None,指定 SSL 设置,可有可无,ssl.SSLContext 类型

  • urllib.request.Request()  把请求独立成一个对象,对请求参数的设定更方便灵活

    参数:url,请求 url。

       data=None,请求参数,可有可无

       headers={},请求 header 参数。

       origin_req_host=None,请求 host 或 IP

       unverifiable=False,表明请求是否无法验证,默认为 false

       method=None,请求方法,get、post、put 等

  • urllib.request.ProxyHandler()  设置代理,参数为 dict,如:{ ‘http‘: ‘120.194.18.90:81‘}
  • urllib.request.build_opener()  构建 Opener,参数为上面设置的代理
  • urllib.request.install_opener()  安装 Opener,参数为上面构建的 opener
  • urllib.request.HTTPCookieProcessor()  cookie 操作,参数为 http.cookiejar.CookieJar() 得到的 cookie

 

from urllib import request,parse

#url
url = http://fanyi.baidu.com/sug

#request data
data = {kw: python}
data = parse.urlencode(data).encode(utf-8)

#proxy
proxy = {http: 120.194.18.90:81}
proxy_handler = request.ProxyHandler(proxy)
opener = request.build_opener(proxy_handler)
request.install_opener(opener)

#headers = {
#    ‘Content-Length‘: len(data),
#    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0‘
#}

#req = request.Request(url=base_url, data=data, headers=headers)
req = request.Request(base_url, data)

req.add_header(User-Agent, Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0)

rsp = request.urlopen(req)

result = rsp.read().decode(utf-8)

print(result)
#rsp 的属性
print(返回数据类型: {}.format(type(rsp)))

print(返回数据信息: {}.format(rsp))

print(header 信息: {}.format(rsp.info()))

print(header 信息: {}.format(rsp.getheaders()))

print(header 属性信息: {}.format(rsp.getheader(Server)))

print(响应状态信息: {}.format(rsp.status))

print(响应状态信息: {}.format(rsp.getcode()))

print(响应的 URL: {}.format(rsp.geturl()))
#cookie 操作

from urllib import request
from http impot cookiejar

#获取 cookie
cookie = cookiejar.CookieJar()
handler = request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)

rsp = opener.open(http://www.baidu.com)
res = rsp.read().decode(utf-8)

print(res)

#保存 cookie
#FileCookieJar、MozillaCookieJar、LWPCookieJar,不同的保存格式
filename = cookie.txt
cookie = cookiejar.MozillaCookieJar(filename)
handler = request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)

rsp = opener.open(http://www.baidu.com)

cookie.save(igonre_discard=True, ignore_expires=True)

#使用 cookie
cookie cookiejar.MozillaCookieJar()
cookie.load(cookie.txt, ignore_discard=True, ignore_expires=True)
handler = request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)
rsp = opener.open(http://www.baidu.com)

res = rsp.read().decode(utf-8)
print(res)

 

二、urllib.parse

  • urllib.parse.urlparse()  将 URL 解析成元组形式

    参数:

      url,访问 url

      scheme,解析协议,https、http

      allow_fragments=False,是够带有查询参数 

  • urllib.parse.urlunparse()  将元组拼接成完整 url
  • urllib.parse.urljoin()  拼接 url

  

#1
url = https://www.baidu.com/s?
qs = {wd:python}

qs = urllib.parse.urlparse(qs)
full_url = url + qs

#2
url = urllib.parse.urlparse(http://www.baidu.com/s?wd=python)
print(url)

#3
data = [http, www.baidu.com, s, wd=python]
print(urllib.parse.urlunparse(data))

#4
print(urllib.parse.urljson(http://www.baidu.com, index.html))

三、urllib.error

  通过 try...except 可以捕捉异常,error 分为 HTTPError,URLError

try:
    res = urllib.request.urlopen(url).open().decode(utf-8)
    print(res)
except urllib.error.URLError as e:
    print(e)
except urllib.error.HTTPError as e:
    print(e)
except Exception as e:
    print(e)

四、urllib.robotparser

以上是关于Python 爬虫 --- urllib的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫——urllib使用代理

Python爬虫进阶——urllib模块使用案例淘宝

Python爬虫初学-urllib3

Python爬虫:urllib库的基本使用

爬虫中urllib库

爬虫--urllib模块