python爬虫之IP代理
1.为什么要使用代理
我们在爬虫的过程中经常遇到这样的情况:最初代码正常运行,正常抓取数据,一切是那么美好,但是一盏茶的功夫过后可能就会出现错误,比如403forbidden 出现这样的原因多半是因为网站采取了反爬措施,比如,网站会检测一个ip单位时间发送的请求数,超过某个数量就会限制该IP的访问,一段时间后才能恢复。这种情况就是封IP,于是网站成功的把我们的爬虫限制了。 试想一下,如果我们能像伪装客户端的方式来伪装ip,是不是就解决问题了呢?
2.获取代理
网上有很多免费代理,如西刺代理等,当然也有收费的,可自行选择。这里以西刺代理为例,看如何爬取代理ip, 首先,百度搜索西刺代理进入官网。
下面附爬虫代码
import requests
import re
from fake_useragent import UserAgent
def spider(url):
"""
爬取并获得网页源码的字符串
:param url: 西刺url
:return: 网页源代码字符串
"""
ua = UserAgent()
header = {
'user-agent': ua.random,
'Host': 'www.xicidaili.com'
}
try:
response = requests.get(url, headers=header)
except Exception as e:
print(e)
else:
response.encoding = response.apparent_encoding
return response.text
def get_ip(text):
ip_list = re.findall('alt="Cn" /></td>\n[\s]+<td>(.*?)</td>\n[\s]+<td>(.*?)</td>\n\s+<td>\n[\s]+<a href=', s)
return dict(ip_list)
if __name__ == '__main__':
text = spider('https://www.xicidaili.com/wn/')
ip_dict = get_ip(text)
至此就得到了代理ip,那如何检测我们得到的IP是可用的呢,下面我们继续说说如何使用代理ip
3.检测并使用代理
requests中使用代理的方法:
proxy = '带端口的ip'
proxies = {
'http': 'http://' + proxy,
'https': 'https//' + proxy
}
header = {...}
url = '目标id'
resp = requests.get(url,proxies=proxies, headers=header)
rescode = requests.status_code
检测ip是否可用:
可根据返回状态码验证是否可用,200则可用