问题
在写爬虫的早期,一些小的练手项目,并不会涉及到IP的问题,用默认的网络爬一下就OK了。但是一旦面临较大的数据量,较多条目的数据,意味着更多的请求。就有了自己默认IP被封的可能性。一个合格的网站为了防止服务器负载过大,也应该设置这样的机制来限制频繁请求。
那么我们写爬虫的人该如何处理这种情况呢?
解决
为了防止一个IP访问过于频繁而造成的的拒绝访问,治标的方法是,在求请访问的时候设置一定的时间间隔。
import time
......
time.sleep(10)
....
这种方法对于很多的网站已经是足够对付了,但是仍然有一定的风险,尤其是数据量很大的时候。
治本的方法是,设置动态代理
直接来看代码:
def get_ip_list(self):
print("正在获取代理列表...")
url = 'http://www.xicidaili.com/nn/'
html = requests.get(url=url, headers=self.headers).text
soup = BeautifulSoup(html, 'lxml')
ips = soup.find(id='ip_list').find_all('tr')
ip_list = []
for i in range(1, len(ips)):
ip_info =