Python中常见的添加IP代理简单介绍
文章摘要:
常用代理有:
1、购买的动态IP隧道:比如阿布云动态隧道,请求不返回IP,代理访问请求,返回请求值;
2、私密代理IP:即为能够拿到返回的具体IP值(有时间限制),然后我们再用拿到的代理IP构造代理池,然后发起请求;
3、自己通过抓取免费代理IP,构造自己的IP代理池,有兴趣请移步:https://blog.csdn.net/Owen_goodman/article/details/100074822
常见代理使用场景:
1、requests脚本:get/post请求
2、scrapy:get/post 请求,在中间件添加代理
3、自动化脚本:selenium+webdriver+代理
详细介绍:
一、在requests库中代理的使用
- 阿布云动态隧道
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
}
# 这里是阿布云服务器
# 代理服务器
proxyHost = "http-dyn.abuyun.com"
proxyPort = "9020"
# 代理隧道验证信息
proxyUser = "****" # 你的通行证书
proxyPass = "****" # 你的通行秘钥
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {"host": proxyHost,"port": proxyPort,"user": proxyUser,"pass": proxyPass,
}
proxies = {"http": proxyMeta,"https": proxyMeta,
}
time.sleep(0.1)
url = 'baidu.com'# get请求使用阿布云
response = requests.get(url=url, proxies=proxies, headers=headers)# post请求使用方法雷同
data={}
response = requests.post(url=url, proxies=proxies, headers=headers, data=data)
- 私密代理IP(个人使用的蜻蜓代理)
class dandd():def spider(self):# 以 Python3 为例,其他编程语言也类似,仅需发送 HTTP GET 请求接口即可import requests# 点击上面的生成按钮生成的接口地址targetUrl = "***" # 你的接口地址resp = requests.get(targetUrl)print(resp.status_code)print(resp.text)# 这里是 蜻蜓代理with open("./ip.txt", "w+") as f:iplist = f.readlines()ipList = iplist[0::2]self.count = len(ipList)ip = random.choice(ipList)proxies = {"http": 'http://' + ip.replace("\n", "")}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",}url = 'baidu.com'res = requests.get(url=url, proxies=proxies, headers=headers)res = requests.post(url=url, proxies=proxies, headers=headers)if __name__ == '__main__':d1 = dandd()d1.spider()
二、在scrapy框架中代理的使用
- 重写requests方法
from requests import Requestdef start_requests(self, *args):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",}url = 'baidu.com'proxies = {"http": 'http://' + ip.replace("\n", "")} # 见上面# post请求同理request = Request(url, callback=self.parse, dont_filter=True,headers=headers, meta={'proxy': proxies})# time.sleep(0.5)yield request
- 在中间件DOWNLOAD添加代理
# 这里是阿布云代理
# 代理服务器
import random
from scrapy.downloadermiddlewares.useragent import UserAgentMiddlewareproxyServer = "http://http-dyn.abuyun.com:9020"
# 代理隧道验证信息
proxyUser = "****"
proxyPass = "****"'''
# for Python2
proxyAuth = "Basic " + base64.b64encode(proxyUser + ":" + proxyPass)'''
# for Python3
proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8")class ProxyMiddleware(object):# 将原本的process_request(self,request,spider)注释掉# 第一种def process_request(self, request, spider):request.meta["proxy"] = proxyServerprint('使用代理服务器')request.headers["Proxy-Authorization"] = proxyAuth# 第二种# 通过制定spider名字,可以指定对特定脚本使用代理 def process_request(self, request, spider):if spider.name in ["name1", "name2", "name3"]:request.meta["proxy"] = proxyServerrequest.headers["Proxy-Authorization"] = proxyAuth
# 这里是蜻蜓代理
# 下面示例是写在中间件里,然后在settings里开启这个中间件
class qingTingMiddleware(object):# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the downloader middleware does not modify the# passed objects.num = 1 #count = 0 # 统计所有的ip个数index = 0 # 取第几个ipnow = 0def getIP(self): # 获取一个ipif self.count - 1 == self.index or self.index == 0: # 取完所有IP,或者第一次取IPpre = self.nowself.now = time.time()if int((self.now - pre)) < 6:time.sleep(6 - int((self.now - pre)))self.now = time.time()print("重新调用IP")getAllIp = "your api"es = requests.get(url=getAllIp)res.encoding = "utf-8"with open("./ip.txt", "w") as f:f.write(res.text)if self.index != 0:self.index = 0ip = re.findall(r'(\d+\.\d+\.\d+\.\d+:\d+)', res.text)[self.index] self.index += 1else:with open("./ip.txt", "r") as f:iplist = f.readlines()ipList = iplist[0::2]self.count = len(ipList)ip = ipList[self.index]self.index += 1return 'http://' + ip.replace("\n", "")@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return s# 将原本的process_request(self,request,spider)注释掉# 第一种def process_request(self, request, spider):ip = self.getIp()request.meta['proxy'] = ip# 第二种def process_request(self, request, spider):if spider.name in ["name1", "name2", "name3"]:ip = self.getIp()request.meta['proxy'] = ipelse:return None# def process_request(self, request, spider):# # Called for each request that goes through the downloader# # middleware.## # Must either:# # - return None: continue processing this request# # - or return a Response object# # - or return a Request object# # - or raise IgnoreRequest: process_exception() methods of# # installed downloader middleware will be called# return Nonedef process_response(self, request, response, spider):# Called with the response returned from the downloader.# Must either;# - return a Response object# - return a Request object# - or raise IgnoreRequestreturn responsedef process_exception(self, request, exception, spider):# Called when a download handler or a process_request()# (from other downloader middleware) raises an exception.# Must either:# - return None: continue processing this exception# - return a Response object: stops process_exception() chain# - return a Request object: stops process_exception() chain# #####2020-05-26添加的重试机制,导致断开十几分钟都连着,费时# if isinstance(exception,TimeoutError):# return requestpassdef spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)
三、自动化工具selenium
- 直接放在中间件中
- 写在请求中
def parse(self, response):url = "http://.aspx"chrome_options = Options()# proxies = random.choice([# "116.239.105.250:40049",# "117.26.88.235:23525",# "60.182.178.192:30221",# "123.163.184.232:43565",# "113.120.62.57:43358",# "1.199.187.37:41380",# "117.87.139.65:49842",# "113.128.26.228:31984",# "125.117.146.134:48840",# "113.120.63.82:42216",# ])# 设置代理chrome_options.add_argument('--proxy-server=%s' % proxies)# chrome_options.add_argument('--headless') # 无头模式chrome_options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bugchrome_options.add_argument('--no-sandbox') # 以最高权限运行chrome_options.add_argument("--test-type")chrome_options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')driver = webdriver.Chrome(chrome_options=chrome_options)driver.get(url)page = driver.page_sourceres = etree.HTML(page) # 是将HTML转化为二进制/html 格式
Python中常见的添加IP代理简单介绍相关推荐
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...
- python 中常见的面试练习题
python 中常见的面试题 语言特性 编码规范 数据类型-字符串 数据类型 - 列表 数据类型 - 字典 数据类型 - 综合 操作类题目 高级特性 正则表达式 其他内容 算法和数据结构 爬虫类 网络 ...
- Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片
Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...
- Python 中常见的配置文件写法
相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...
- Python中常见的配置文件写法分享!
相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...
- Python中常见的__init__.py是什么意思?详解Python import的方式和原理
Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...
- 爬虫中的User-Agent和IP代理
爬虫中的User-Agent和IP代理 一.User-Agent 按照百度百科的解释:User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本 ...
- Python中常见的关键字
Python中常见的关键字 什么是关键字 简单的我们可以把关键字看作古代朝廷的官衔,每一个当官的人可能不一样,但每一个官衔都对应着不同的职位,不同的职责. Python内部自带的用于处理业务逻辑的特殊 ...
- python如何基于redis实现ip代理池
这篇文章主要介绍了python如何基于redis实现ip代理池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用apscheduler库定时爬取i ...
最新文章
- 情感分析:基于卷积神经网络
- 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
- linux中传输文件方法,Linux快速传输文件几种方法
- 理解 Keystone 核心概念 - 每天5分钟玩转 OpenStack(18)
- C#服务器编程:WebService、Ajax与回调函数(一)
- dp 树状数组 逆序元组
- WildFly Swarm:使用Java EE构建微服务
- .net一个函数要用另一个函数的值_VLOOKUP函数
- c hello world
- u-boot工作流程
- 手撕Vue-Router
- Django框架详细介绍---认证系统
- 小贝拉机器人是朋友_被Angelababy、周震南等摸头杀?机器人贝拉凭什么受宠
- mdui.js手机端侧边滑出导航菜单
- 可编程、变频调速与触摸屏实验实训装置
- 【selenium】126官网邮箱登录
- Js 把html字符串显示,js Html结构转字符串形式显示代码
- LGP970刷机心得
- 直接下载:Windows 10正式版官方原版镜像!
- 网站快照被劫持,网站被劫持跳转另一个网站解决办法
热门文章
- 智能产品的“情感交互”
- 【mybatis】mybatis的特性和优势
- 一名软件工程师实习生的创业公司体验
- Python是机器学习的“最佳语言”的N大证据
- 线段树 java_线段树合并:从入门到放弃(示例代码)
- 【第十七届智能车】智能车图像处理(4)-元素识别(三岔)
- 解决gnuplot中'Terminal type set to 'unknown'不能显示绘图的问题
- Android禁止自动同步网络时间
- python zipfile压缩使用说明
- C#中控制键盘只输入数字,退格