在(一)刚入爬虫坑(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,为了测试,买一个一元钱的就OK了。

Cookie的使用:
有一些网站是需要登录状态才能继续浏览数据,例如一些社交网站,或者有一些搜索引擎也有限制,不登录只能浏览部分数据,这个就需要用到cookie来搞定这个步骤。现在就用人人网做个例子,先登录获得cookie,然后用cookie跳过其他页面的登录验证:

网友评论