1 、 爬虫代理
\quad 对于爬虫来说,由于爬虫爬取速度过快,在爬取的过程中可能会遇到同一个IP访问太过频繁,在网站反爬措施下导致直接拒绝访问,也就是所谓的封IP,因此需要一种借助某种方式来伪装我们的IP,让服务器识别不出是由本机发送的请求。这里我们使用代理IP的方式来实现IP的伪装。
2 、 代理的作用
\quad 代理实际上就是代理服务器,英文叫做proxy server,它的功能是代理网络用户去取得网络信息,通俗的说就是我们所说的代购。
3 、 常见代理设置
4 、 爬取代理IP
\quad 对于如何爬取查找我们要爬取数据在网页上的位置节点,以及爬取数据,在我这篇博客 https://blog.csdn.net/weixin_41704182/article/details/86546559 ,已经有详细说明,因此这里就做说明了。
t a l k − i s − c h e a p − s h o w − m e − t h e − c o d e talk- is -cheap-show -me -the -code talk−is−cheap−show−me−the−code
import csv
import requests
from bs4 import BeautifulSoup# 导入所需库
# 请求头部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}
def Get_IP(url): # 获取单页ip信息
respose = requests.get(url, headers=headers)
soup = BeautifulSoup(respose.text, 'lxml')
zip = soup.find_all('tr')#获取节点文本信息
#写入csv文件
csvFile = open('ip_pools.csv', 'a+', encoding='utf-8')
writer = csv.writer(csvFile)
writer.writerow(('ip', '端口'))
for i in range(1,len(zip)):
writer.writerow([zip[i].get_text().strip('\n').split('\n')[0:2]])
if __name__ == '__main__':
for i in range(30):#多页IP信息
urls={'https://www.xicidaili.com/?start={}&filter='.format(i)}
for url in urls:
Get_IP(url)
5 、 验证代理IP
\quad 在上面我们说过,我们在一些免费的代理网站爬取一定数量的IP,但爬取的可用的不多,因此需要验证可用IP,我们需要看看连上代理IP后,能不能在一定时间内打开一个网站,可过可以,就认为该IP可用。
import urllib.request
import csv
def IP_pools():
reader=csv.reader(open('ip_poolss.csv'))
IP_pools=[]
for row in reader:
## 创建连个代理ProxyHandler
ProxyHandler = {"http":row[0]+':'+row[1]}
handler=urllib.request.ProxyHandler(ProxyHandler)
opener=urllib.request.build_opener(handler)
urllib.request.install_opener(opener)
try:
respose=urllib.request.urlopen('http://www.baidu.com')
IP_pools.append([row[0],row[1]])
except Exception as e:
continue
return IP_pools
if __name__ == '__main__':
IP_pools()