在(一)刚入爬虫坑(2)——urllib.request库的使用(1) 中介绍了user-agent可以模拟成浏览器发送请求,也提到了代理、使用cookies可以模拟登录状态与服务器通信,这节主要研究一下。
做爬虫程序的时候,最怕的就是被封IP,为了保证本机IP不被封禁,选择使用代理IP的形式访问服务器。
urlopen()可以发送请求,可以使用user-agent,但是不能使用代理,cookie等功能。
需要通过Handler处理器对象,设置代理IP,然后进行访问。
Handler处理器对象和opener对象:
从urllib.request的urlopen()源码中可以看到,其实urlopen运行的是一个特殊的opener对象,是已经被构建好的。大致过程是通过build_opener()方法使用Handler创建的处理器对象,创建自定义的opener对象。使用opener对象,调用open()方法发送请求。
下面就自定义一个简单的opener对象:
上面这个opener对象也不能处理代理IP的问题,所以我们需要使用其他的Handler,完成使用代理IP的目的:
这个里面的IP估计已经是不能用了,可以到西刺代理去找,碰碰运气
上面代码使用代理IP的范围是固定的,如果这些IP都不能用了,只能去更改代码里面的IP列表,换一批能用的,这就很麻烦了。
解决这个问题,我们可以使用阿布云的代理IP,为了测试,买一个一元钱的就OK了。
这个里面的账户和密码估计已经失效了,可以到阿布云代理去购买一个动态的IP,每次HTTP请求的IP都不一样, 相当于IP池
Cookie的使用:
有一些网站是需要登录状态才能继续浏览数据,例如一些社交网站,或者有一些搜索引擎也有限制,不登录只能浏览部分数据,这个就需要用到cookie来搞定这个步骤。现在就用人人网做个例子,先登录获得cookie,然后用cookie跳过其他页面的登录验证:
先使用POST登录获得登陆之后的信息,然后在带着信息访问其他页面,就可以跳过登录验证,如果没有发送post请求获得cookie,则无效