1.反爬机制处理
在使用Python进行爬虫处理时,会遇到网站拥有反爬机制,在频繁的访问同一个网站时,网站服务器会防止网站遭到恶意攻击导致服务器崩溃而进行保护措施,也就是所谓我们常见的封IP手段,所以我们在进行爬虫过程中可以尝试每次访问请求时进行随机更换IP以及我们设置随机请求报头。
2.爬取国内IP代理网站搭建IP代理池
常用方法:在代理ip网站进行爬取,一次爬取大量的IP地址并进行存储,由于许多IP可能存在无效,所以我们需要进行验证IP是否有效,去除无效IP地址。
在国内某代理ip网站爬取批量ip地址并进行存储在ip_list.txt文本中保存。
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
def get_ip_list():
url = "https://www.xicidaili.com/"
web_data = requests.get(url,headers = headers).text
soup = BeautifulSoup(web_data,"lxml")
ips = soup.find_all('tr')
ip_list = []
for i in range(1,len(ips)):
ip_info = ips[i]
tds = ip_info.find_all('td')
if tds:
ip_list.append(tds[1].text)
for ip in ip_list:
try:
proxy_host = "https://"+str(ip)
proxy_temp = {"https":proxy_host}
res = urllib.urlopen(url,proxies = proxy_temp).read()
except Exception as e:
ip_list.remove(ip)
continue
return ip_list
def write_ip_list():
ip_list = get_ip_list()
for i in ip_list:
with open ('ip_list.txt','a') as f:
f.write(i)
f.write('\n')
print("写入成功!")
write_ip_list()
ip地址保存后,在每次需要进行爬虫项目前,清空ip_list.txt文本中未更新的ip地址,将运行一遍该代码即可,将该文本文件与该代码文件放在同一层目录下使用。
在爬虫项目中加上该函数方法随机获取一条IP地址,并写成字典的格式
import random
def get_ip():
ip_list = []
with open ('ip_list.txt') as f:
for line in f.readlines():
ip_list.append(line)
ip = random.choice(ip_list)
proxy_host = ("http://"+str(ip)).replace('\n','')
proxy_temp = {"http":proxy_host}
即proxy_temp可设置为proxies的参数,代理IP的方法即可完成。
该方法适用于学习阶段,如果爬虫项目需要稳定IP,则需要购买稳定有效IP来使用。
3. 随机更换请求报头User-Agent
python爬虫爬取网站内容时,如果什么也没带,即不带报头headers,往往会被网站管理维护人员认定为机器爬虫。因为,此时python默认的user-agent如Python-urllib/2.1一样。因此,网站管理人员会根据请求的user-agent判定你是不是机器爬虫。所以,此时往往就需要伪装user-agent,模拟成真实的浏览器去取出内容。
- 首先我们需要安装fake-useragent,这是一个python的user-agent池。
- pip install fake-useragent
- 然后我们引用这个库,即可:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent':ua.random}