凤凰传奇的粉丝

挟风奔跑,快感溢于言表;用心学习,知识武装大脑

我要爬爬虫(2)-实例化处理器,代理及cookie

实例化处理器

当我们请求一个带有弹出窗口验证的网页,例如http://httpbin.org/basic-auth/user/passwd
这里写图片描述
HTTPPasswordMgrWithDefaultRealm函数可以加入用户名和密码信息。
使用HTTPBasicAuthHandler函数实例化处理器。
使用build_opener函数可以实例化一个opener,是上节学习的urlopen()的一般性方法。urlopen()相当于封装了最常用的请求方法,而为了实现更高级的功能,我们需要更深层的配置,更底层的实例来操作。

from urllib.request import HTTPBasicAuthHandler,HTTPPasswordMgrWithDefaultRealm,build_opener
from urllib.error import URLError
username='Tom'
password='123'
url='http://httpbin.org/basic-auth/user/passwd'
p=HTTPPasswordMgrWithDefaultRealm()
p.add_password(None,url,username,password)
handler=HTTPBasicAuthHandler(p)
opener=build_opener(handler)#这里build_opener的参数是处理器对象
try:
    response=opener.open(url)
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

这里写图片描述

使用代理

在网上随便找了个免费代理,发送请求到http://httpbin.org/get

from urllib.error import URLError
from urllib.request import ProxyHandler,build_opener,Request
proxy_server=ProxyHandler({
    'http':'http://115.48.205.33:20798',
    'https':'http://115.48.205.33:20798'
})
opener=build_opener(proxy_server)
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
url='http://httpbin.org/get'
#url='http://www.baidu.com'
req=Request(url,headers=headers)
try:
    response=opener.open(req)
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

可以看到响应
这里写图片描述
origin那一项是代理IP.
若代理不可用,则会抛出异常。
[WinError 10061] 由于目标计算机积极拒绝,无法连接。

使用Cookies

cookie和session均是用户登陆的凭证。其中cookie保存在客户端,即浏览器里;session保存在服务器端。
登录服务器时,会产生cookie数据保存用户的登陆信息。将cookie加入请求一并发送至服务器,识别通过后可以进入用户登陆状态,返回只有登录才能访问的内容。通过保存cookie在本地文件,需要的时候载入,便可以实现免登录操作。

获取Cookies

使用http.cookiejar模块的CookieJar()函数可以实例化一个cookie对象,
cookie=http.cookiejar.CookieJar()
使用urllib.request模块的HTTPCookieProcessor()函数可以实例化一个带有cookie的处理器。
handler=urllib.request.HTTPCookieProcessor(cookie)

import  http.cookiejar,urllib.request
cookie=http.cookiejar.CookieJar()
handler=urllib.request.HTTPCookieProcessor(cookie)
opener=urllib.request.build_opener(handler)
url='http://www.baidu.com'
response=opener.open(url)
for item in cookie:
    print(item.name+'='+item.value)
print(cookie)

返回了cookie数据,格式为name:value.
这里写图片描述

保存Cookies

为了将cookie保存到本地,方便随时载入,要用到http.cookiejar模块的MozillaCookieProcessor()函数,
cookie=http.cookiejar.LWPCookieJar(filename)
cookie.save(ignore_discard=True,ignore_expires=True)

这里ignore_discard意为忽视被丢弃,ignore_expires意为忽视过期,均设置为True可以让被丢弃的,过期的cookie仍能被保存下来。

import http.cookiejar,urllib.request
file='LWP_cookie.txt'
cookie=http.cookiejar.LWPCookieJar(file)
handler=urllib.request.HTTPCookieProcessor(cookie)
url='http://www.baidu.com'
opener=urllib.request.build_opener(handler)
response=opener.open(url)
cookie.save(ignore_discard=True,ignore_expires=True)

使用MozillCookieJar()函数保存的cookie就是下图的Mozilla格式。
这里写图片描述
而使用LWPCookieJar()函数保存的cookie就是下图的LWP格式。
这里写图片描述

载入Cookies

什么格式保存的cookie就用什么方法实例化的cookie对象载入。
cookie.load(file)
可以看到MozillaCookieJar()函数在保存cookie时,应传入文件名作为参数;在载入cookie时,是不传参数。LWPCookieJar()类似。

import http.cookiejar,urllib.request
file='cookie.txt'
cookie=http.cookiejar.MozillaCookieJar()
cookie.load(file)
handler=urllib.request.HTTPCookieProcessor(cookie)
url='http://www.baidu.com'
opener=urllib.request.build_opener(handler)
response=opener.open(url)
print(response.read().decode('utf-8'))

可以返回目标网站的源码。

阅读更多
文章标签: spider
个人分类: spider python web
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

我要爬爬虫(2)-实例化处理器,代理及cookie

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭