Urllib

Pytho2:

  • Urllib库
  • Urllib2库

Python3:

  • Urllib库

变化:

  • 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。
  • 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse。
  • 在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse。
  • 在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen。
  • 在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode。
  • 在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote。
  • 在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar。
  • 在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request。

最简单的爬虫程序

import urllib.request
file=urllib.request.urlopen('http://www.baidu.com')
data=file.read()    #读取全部
fhandle=open("./1.html","wb")    #将爬取的网页保存在本地
fhandle.write(data)
fhandle.close()

模拟浏览器行为

import urllib.request
import urllib.parse

url = 'http://www.baidu.com'
header = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
}

request = urllib.request.Request(url, headers=header)
reponse = urllib.request.urlopen(request).read()

fhandle = open("./baidu.html", "wb")
fhandle.write(reponse)
fhandle.close()

代理IP的使用

import urllib.request
def use_proxy(proxy_addr,url):
    
    proxy=urllib.request.ProxyHandler({'http':proxy_addr})
    opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    urllib.request.install_opener(opener)
    data=urllib.request.urlopen(url).read().decode('utf8')
    return data

proxy_addr='61.163.39.70:9999'
data=use_proxy(proxy_addr,'http://www.baidu.com')
print(len(data))

cookielib库和HTTPCookieProcessor处理器

Python处理Cookie,一般是通过cookielib模块和urllib的request模块的HTTPCookieProcessor处理器类一起使用

  • cookielib模块:主要作用是提供用于存储cookie的对象
  • HTTPCookieProcessor处理器:只要处理cookies对象,并构建handler对象

cookielib库
该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar

  • CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个 cookie 都存储在内存中。
  • FileCookieJar (filename,delayload=None,policy=None):CookieJar 派生而来,将 cookie 存储到文件中。filename 是存储 cookie 的文件名。delayload 为 True 时支持延迟访问文件,即只有在需要时才读取文件或在文件中存储数据。
  • MozillaCookieJar (filename,delayload=None,policy=None) : 从 FileCookieJar 派 生 而 来 ,MozillaCookieJar 实例与 Mozilla 浏览器 cookies.txt 兼容。
  • LWPCookieJar (filename,delayload=None,policy=None):从 FileCookieJar 派生而来,实例与
    libwww-perl 标准的 Set-Cookie3 文件格式兼容。
  • HTTPCookieProcessor 处理器:处理 cookie 对象,并构建 handler 处理器对象。

COOKIES的使用

import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar

url='http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=La2A2'
data={
    'username':'zhanghao',
    'password':'mima',
}
postdata=urllib.parse.urlencode(data).encode('utf8')
header={
    'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}

request=urllib.request.Request(url,postdata,headers=header)
#使用http.cookiejar.CookieJar()创建CookieJar对象
cjar=http.cookiejar.CookieJar()
#使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象
cookie=urllib.request.HTTPCookieProcessor(cjar)
opener=urllib.request.build_opener(cookie)
#将opener安装为全局
urllib.request.install_opener(opener)

try:
    reponse=urllib.request.urlopen(request)
except urllib.error.HTTPError as e:
    print(e.code)
    print(e.reason)

fhandle=open('./test1.html','wb')
fhandle.write(reponse.read())
fhandle.close()

url2='http://bbs.chinaunix.net/forum-327-1.html'   #打开test2.html文件,会发现此时会保持我们的登录信息,为已登录状态。也就是说,对应的登录状态已经通过Cookie保存。
reponse2=urllib.request.urlopen(url)
fhandle2=open('./test2.html','wb')
fhandle2.write(reponse2.read())
fhandle2.close()

你可能感兴趣的:(Urllib)