-
关于cookielib
1>cookie:有一些网站在cookie未启用的时候无法浏览,而cookie是用于某些网站辨别用户身份,进行session跟踪而存储在 用户本地终端 上的数据(比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。)
2>打开网页的console,刷新页面之后,在network中会有Request Headers,其中就有cookie
当我们(客户端)输入URL请求页面后,我们即给web服务端发送了一个要求(request),web server根据Request生产响应的response,发回给我们(客户端),然后解析Response的html,我们就可以看到页面
–当网站发送页面到客户端时(服务器发送给客户端),会发送Headers来描述HTTP事物,送回来的headers(response headers)中包含一些有cookie的文本。如果此时想要从相同的服务器返回其他页面(客户端请求其他页面),那么cookie就必须作为请求的handler(request handler)传送给服务器,这就意味着cookies会存储一些信息让服务器来识别你。
#其中一种获取网页的方式#
cj =cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
response3 = urllib2.urlopen(url)
print response3.getcode()
print cj
print response3.read()关于CookieJar()
cookielib.CookieJar用于存储cookie对象,此模块捕获cookie并在后续连接请教时重新发送,还可以用来处理包含cookie数据文件
关于opener和handlers
1>opener:当你获取一个URL的时候,你就使用一个opener(一个urllib2.OpenerDirector的实例) 默认的opener也就是我们常用的urlopen。它是一个特殊的opener,传入的参数仅仅是url,data,timeout(可以注意到并没有cookie,说明在某些网页中无法使用这种方法抓取数据),如果我们需要用到cookie,就需要创建更一般的opener来实现对Cookie的设置
-
自定义opener
#使用build_opener()
opener = urllib2.build_opener([handler1[handler2...]])
参数handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等
①修改http报头
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open(url)
②install_opener(opener)
安装不同的opener对象作为urlopen()使用的全局opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
response3 = urllib2.urlopen(url)
③密码验证(HTTPBasicAuthHandler)
HTTPBasicAuthHandler()处理程序可用add_password()来设置密码。
h.add_password(远程关联的名称,基URL,user,passwd)
-
import urllib2
auth=urllib2.HTTPBasicAuthHandler()
auth.add_password('Administrator','http://www.example.com','Dave','123456')
opener=urllib2.build_opener(auth)
u=opener.open(URL)
④Cookie处理(HTTPCookieProcessor)
import urllib2,cookielib
cookie=cookielib.CookieJar()
cookiehand=urllib2.HTTPCookieProcessor(cookie)
opener=urllib2.build_opener(cookiehand)
⑤代理(ProxyHandler)-
ProxyHandler(proxies)参数proxies是一个字典,将协议名称(http,ftp)等映射到相应代理服务器的URL。
proxy=ProxyHandler({'http':'http://someproxy.com:8080'})
auth=HTTPBasicAuthHandler()
auth.add_password()
opener=build_opener(auth,proxy)
-
实例爬虫
1.确定抓取的目标:
-通过网页”检查元素”的操作可以确定该网页的url格式,数据格式和网页编码
2.分析目标
3.编写代码
在一个包中写入:总程序调度文件、URL管理器文件、HTML下载器文件、HTML解析器文件、HTML输出器文件