欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-06 23:51:52
...

实例化处理器

当我们请求一个带有弹出窗口验证的网页,例如http://httpbin.org/basic-auth/user/passwd
我要爬爬虫(2)-实例化处理器,代理及cookie
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)

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

使用代理

在网上随便找了个免费代理,发送请求到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)

可以看到响应
我要爬爬虫(2)-实例化处理器,代理及cookie
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.
我要爬爬虫(2)-实例化处理器,代理及cookie

保存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格式。
我要爬爬虫(2)-实例化处理器,代理及cookie
而使用LWPCookieJar()函数保存的cookie就是下图的LWP格式。
我要爬爬虫(2)-实例化处理器,代理及cookie

载入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