python3爬虫之IP代理

时间:2021-08-29 16:58:58

IP代理的使用

  1. 为何使用代理IP

    User Agetn 已经设置好了,但是还应该考虑一个问题,程序的运行速度是很快的,如果我们利用一个爬虫在网站爬取,一个固定IP的访问频率就会很高,这不符合人为操作的标准,因为人不可能在几ms内,进行如此频繁的访问。所以一些网站会设置一个IP访问频率的阈值,如果超过这个阈值,说明不是人访问,而是一个爬虫程序。

  2. 一般步骤说明

    简单的方法就是设置延时,但是这获取信息太慢,所以另一种方法更好,就是使用IP代理,使用代理的步骤:

    1. 调用urilib.request.ProxyHandler(),proxies参数为一个字典。

      class urllib.request.ProxyHandler(proxies=None)

    2. 创建Opener(类似于urlopen,这个代开方式就是我们自己定制的)

      urllib.request.build_opener([handler,...])
    3. 安装Opener

      urllib.request.install_opener(opener)

使用install_opener方法之后,会将程序默认的urlopen方法替换掉。也就是说,如果使用install_opener之后,在改文件中,再次调用urlopen会使用自己穿件好的opener。如果不想替换掉,只是想临时使用一下,可以使用opener.open(url),这样就不会对程序默认的urlopen有影响。

  1. 代理IP选取

在写代码之前,先在代理IP网站选好一个IP地址,可以使用西刺代理IP.

url:http://www.xicidaili.com/

注意:当然可以写个正则表达式从网站爬取IP,但是要记住不要太频繁爬取,加个延时,太频繁给服务器带来压力了,服务器会直接把你block,不让你访问的。

我的选择如下:175.155.24.118:808

好不容易找到了一个可以查ip的网站:http://1212.ip138.com/ic.asp

代码如下:
`
from urllib import request

if __name__ == "__main__":
#访问网址
url = "http://1212.ip138.com/ic.asp"
#这是代理IP
proxy = {'http':'175.155.24.118:808'}
#创建ProxyHandler
proxy_handler = request.ProxyHandler(proxy)
#创建opener
opener = request.build_opener(proxy_handler)
#添加User agent
opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'),
('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'),
('Referer','http://www.ip138.com/'),
('Accept-Language','zh-CN,zh;q=0.8'),
('Accept-Encoding','gzip,deflate, sdch'),
('Host','1212.ip138.com')]

#安装opener
request.install_opener(opener)
#使用该opener
res = request.urlopen(url)
#读取信息
html = res.read()
#打印
print(html)
`

运行结果如下:
python3爬虫之IP代理

在设置headers时,从浏览器开发者模式找到上诉页面(推荐用chrome,360浏览器好像有问题),复制Request-Headers里的信息,然后可以借用postman这个工具,尝试看看能不能Post过去得到信息。