代理IP
代理IP:反反爬使用代理ip是非常必要的一种反反爬的方式,但是即使使用了代理ip,对方服务器任然会有很多的方式来检测我们是否是一个爬虫,比如:一段时间内,检测IP访问的频率,访问太多频繁会屏蔽;检查Cookie,User-Agent,Referer等header参数,若没有则屏蔽;服务方购买所有代理提供商,加入到反爬虫数据库里,若检测是代理则屏蔽等。所以更好的方式在使用代理ip的时候使用随机的方式进行选择使用,不要每次都用一个代理ip
什么是代理
- 代理服务器
代理服务器的作用
- 就是用来转发请求和响应
在爬虫中为何需要使用代理?
- 有些时候,需要对网站服务器发起高频的请求,网站的服务器会检测到这样的异常现象,则会讲请求对应机器的ip地址加入黑名单,则该ip再次发起的请求,网站服务器就不在受理,则我们就无法再次爬取该网站的数据。
- 使用代理后,网站服务器接收到的请求,最终是由代理服务器发起,网站服务器通过请求获取的ip就是代理服务器的ip,并不是我们客户端本身的ip。
代理的匿名度
- 透明:网站的服务器知道你使用了代理,也知道你的真实ip
- 匿名:网站服务器知道你使用了代理,但是无法获知你真实的ip
- 高匿:网站服务器不知道你使用了代理,也不知道你的真实ip(推荐)
代理的类型(重要)
- http:该类型的代理服务器只可以转发http协议的请求
- https:可以转发https协议的请求
如何获取代理?
如何使用代理?
-
测试:访问如下网址,返回自己本机ip
import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', } url = 'https://www.sogou.com/web?query=ip' page_text = requests.get(url=url,headers=headers).text tree = etree.HTML(page_text) data = tree.xpath('//*[@id="ipsearchresult"]/strong/text()')[0] print(data)
-
使用代理发起请求,查看是否可以返回代理服务器的ip
import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', } url = 'https://www.sogou.com/web?query=ip' #使用代理服务器发起请求 #proxies={'代理类型':'ip:port'} page_text = requests.get(url=url,headers=headers,proxies={'https':'ip:port'}).text tree = etree.HTML(page_text) data = tree.xpath('//*[@id="ipsearchresult"]/strong/text()')[0] print(data)
-
深度测试:
-
对快代理进行n次请求,直到本机无法访问快代理为止(证明本机ip被快代理封掉了)
-
构建一个代理池(封装了很多代理ip和端口的容器),用于数据的批量爬取
from bs4 import BeautifulSoup from lxml import etree import requests import time import random headers = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36' } #构建一个代理池 proxy_url = 'http://webapi.http.zhimacangku.com/getip?num=15&type=2&pro=&city=0&yys=0&port=1&pack=213751&ts=0&ys=0&cs=0&lb=6&sb=-&pb=4&mr=1®ions=' json_data = requests.get(url=proxy_url,headers=headers).json() json_list = json_data['data'] proxy_list = [] #代理池,每次请求,可以随机从代理池中选择一个代理来用 for dic in json_list: ip = dic['ip'] port = dic['port'] n_dic = { 'https':ip+':'+str(port) # {'https':'111.1.1.1:1234'} } proxy_list.append(n_dic) #爬取多页 #1.创建一个通用的url(可以变换成任意页码的url) url = 'https://www.kuaidaili.com/free/inha/%d/' #2.通过循环以此生成不同页码的url for page in range(1,4): print('----------正在爬取第%d页的数据!-----------'%page) #format用来格式化字符串的(不可以修改url这个字符串本身) new_url = format(url%page) #循环发送每一页的请求 #注意:get方法是一个阻塞方法! page_text = requests.get(url=new_url,headers=headers,proxies=random.choice(proxy_list)).text time.sleep(1) soup = BeautifulSoup(page_text,'lxml') trs = soup.select('tbody > tr') for tr in trs: t1 = tr.findAll('td')[0] t2 = tr.findAll('td')[1] ip = t1.string port = t2.string print(ip,port)
-
芝麻代理获取代理方法
1、访问芝麻代理官网:https://jahttp.zhimaruanjian.com/
2、登陆自己的账号
3、领取免费IP
4、在套餐中心可以看到有赠送的ip
5、点击提取IP
- 选择套餐类型
- 选择提取数量
- 选择json格式
- 生成API链接
- 复制直连ip到浏览器即可查看到生成的端口号和IP