处理反爬问题:
在爬B站用户信息时,由于使用的是requests请求,访问次数过多会被B站检测到,从而封禁本机IP,这让爬取的效率大打折扣。所以现在致力于反反爬机制。
首先使用到的是更换cookie:我询问了同样从事爬虫工作的同学如何进行反爬,他的方法是不断更换cookie以防止被检测。在经过测试后,确认该方法在B站无效。由于B站是直接检测访问的IP,所以更换cookie没能破除B站的反爬机制。
直接使用代理池的方式:我直接更换爬虫访问的IP,首先建立代理池。代理池是从各网站的获取的免费代理,首先从获取的代理中测试哪些代理是可用的,将可用的代理建立proxy_cool,再使用该代理池去爬取信息,每当一个代理挂掉后,从代理池中更换,继续爬取,完成爬虫任务。
代码如下:
def check_proxy(proxy_list):
can_use = []
url = 'https://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
for ip in proxy_list:
try:
respose = requests.get(url=url, headers=headers, proxies=ip, timeout=1)
if respose.status_code == 200:
can_use.append(ip)
except:
continue
return can_use
def get_proxy():
proxy_list = []
file = open('proxy.json', 'r', encoding='UTF-8')
info = json.load(file)
for proxy in info:
ip = proxy['ip'] + ':' + proxy['port']
print(ip)
proxy_dict = {
'http': 'http://' + ip,
'https': 'https://' + ip
}
proxy_list.append(proxy_dict)
print(proxy_list)
can_use = check_proxy(proxy_list)
return can_use