使用同一个ip频繁去爬取同一个网站的网页,可能会被屏蔽,这个时候,我们就可以使用代理服务器来解决这个问题。网上的免费获取代理服务器地址的网站,大家可以自行搜索,一般可以用他们提供的免费代理服务器地址,当然如果有钱的话,用付费的可能会靠谱一点。
那么怎么利用这些个地址呢,我的建议是可以自己写一个爬虫(后面会写一个源码供大家参考),然后把上面的ip地址一个一个爬取出来,存放到一个文件,或者数据库,可以存在MongoDB里面。要用的时候,读取出来,就可以用来设置代理服务器地址了。代理服务器地址的更换,检验可用与否都可以通过代码整合起来调用。
那么具体怎么设置呢,其实非常简单。这里我们主要讲urllib和requests两种方法的代理服务器设置,直接看代码,很容易就懂了。
urllib设置方法
import urllib.request
def use_proxy(proxy_addr,url):
proxy= urllib.request.ProxyHandler({‘http’:proxy_addr})
opener = urllib.request.build_opener(proxy)
request = urllib.request.Request(url)
response = opener.open(request)
print(response.headers)
data = response.read().decode(‘utf-8’)
return data
proxy_addr=“183.148.140.162:9999” #代理地址
data=use_proxy(proxy_addr,”http://www.baidu.com“)
print(len(data))
如果抛出urllib.error.URLError: 的异常,一般是代理地址太慢或者已经失效的问题,可以更换代理ip地址解决。
requests设置代理的方法更简单,post方法也是一样。
import requests
proxies = {
‘http’: ‘http://61.176.223.7:58822‘
} #代理地址
r = requests.get(“http://www.baidu.com“, proxies=proxies)
print(r.headers)
注:若代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/
语法:
proxies = { “http”: “http://user:pass@10.10.1.10:3128/“, }
由于免费的代理服务器地址都是不稳定的,很多都不能用或者不稳定,或者很快就失效了,所以如果有钱还是可以用付费代理ip地址会比较稳定啦。建议还是用requests方式进行请求,相对urllib的方法,比较方便。
网友评论