爬虫代理IP的使用+建立代理IP池

  • 代理`IP`的使用
  • 建立代理`IP`池
  • 完整代码

代理IP的使用

  • 先了解一下百度百科定义的IP

  • 为什么要使用代理IP?
    反爬(反网络爬虫)

  • 示例:
    测试网址

http://httpbin.org/get

  • 用浏览器先访问测试网址下看看

  • 再用我们写的代码简单请求一下网页看看

import requests
url='http://httpbin.org/get'html=requests.get(url=url).text
print(html)
"""
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "python-requests/2.23.0","X-Amzn-Trace-Id": "Root=1-5ff704d4-3841771516040beb29f6066f"},"origin": "1.192.244.128","url": "http://httpbin.org/get"
}
"""

疑惑???

“User-Agent”: “python-requests/2.23.0”

网站如何来判定是人类正常访问还是爬虫程序访问? —> 检查请求头!!!
我们是不是需要发送请求时重构一下User-Agent???
添加 headers参数!!!

那就使用fake_useragent 模块
让它伪造一个出来再试试

import requests
from fake_useragent import UserAgent
url='http://httpbin.org/get'headers={'User-Agent':UserAgent().random}html=requests.get(url=url,headers=headers).text
print(html)
"""
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6","X-Amzn-Trace-Id": "Root=1-5ff7a4de-05f8d7bf49dfe85e3be31d79"},"origin": "1.192.244.128","url": "http://httpbin.org/get"
}
"""

“User-Agent”: “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6”

添加好headers的参数就可以了吗?
这还不行吗!!!

一些网站不但检测 请求头
一个IP 异常请求频繁(访问频率过多) 封禁?

“origin”: “1.192.244.128”

这是一项就是博主的IP, 我怎么确定这就是我的IP呢?
查询一下:果真如此

找个免费的代理IP来包装下

  1. 定义
    代替你原来的IP地址去对接网络的IP地址
  2. 作用
    隐藏自身真实IP, 避免被封
  3. 获取代理IP网站
    快代理、全网代理、代理精灵、… …

这次加上代理IP再去请求下

import requests
from fake_useragent import UserAgent
url='http://httpbin.org/get'
headers={'User-Agent':UserAgent().random}# 参数类型
# proxies
# proxies = {'协议': '协议://IP:端口号'}
proxies = {'http': 'http://{}'.format('8.129.28.247:8888'),'https': 'https://{}'.format('8.129.28.247:8888'),}html=requests.get(url=url,headers=headers,proxies=proxies).text
print(html)
"""
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36","X-Amzn-Trace-Id": "Root=1-5ff7a71d-10b181340f8dc04f7514dfba"},"origin": "8.129.28.247","url": "http://httpbin.org/get"
}
"""

“origin”: “8.129.28.247”

这次和我们加入的IP一样, 而不是我们自己的IP直接去请求了
但这一个够用吗?

别着急往下看啦~~~

建立代理IP

构建一个IP
每次让它随机提供一个来请求不就解决一个IP请求频繁而导致封掉了
这样就达到我们想要的结果了

  • 定义一个测试函数
import requests
from fake_useragent import UserAgenttest_url = 'http://httpbin.org/get'headers = {'User-Agent': UserAgent().random}#                      参数 IP 地址
def test_proxy(proxy):'''测试代理IP是否可用'''proxies = {'http': 'http://{}'.format(proxy),'https': 'https://{}'.format(proxy),}# 参数类型# proxies# proxies = {'协议': '协议://IP:端口号'}# timeout 超时设置 网页响应时间3秒 超过时间会抛出异常try:resp = requests.get(url=test_url, proxies=proxies, headers=headers, timeout=3)# 查看状态码   if resp.status_code == 200:print(proxy, '\033[31m可用\033[0m')else:print(proxy, '不可用')except Exception as e:print(proxy, '不可用')

get一下HTTP状态码

完整代码

  • 本次涉及到xpath对此不了解的同学可以去了解博主之前的博客
  • 也可以去菜鸟教程自行了解一下
  • 本次以 快代理 提供的免费IP 获取为例
# 建立属于自己的开放代理IP池
import requests
import random
import time
from lxml import etree
from fake_useragent import UserAgentclass IpPool:def __init__(self):# 测试ip是否可用urlself.test_url = 'http://httpbin.org/get'# 获取IP的 目标urlself.url = 'https://www.89ip.cn/index_{}.html'self.headers = {'User-Agent': UserAgent().random}# 存储可用ipself.file = open('ip_pool.txt', 'wb')def get_html(self, url):'''获取页面'''html = requests.get(url=url, headers=self.headers).textreturn htmldef get_proxy(self, url):'''数据处理  获取ip 和端口''' html = self.get_html(url=url)# print(html)elemt = etree.HTML(html)ips_list = elemt.xpath('//table/tbody/tr/td[1]/text()')ports_list = elemt.xpath('//table/tbody/tr/td[2]/text()')for ip, port in zip(ips_list, ports_list):# 拼接ip与portproxy = ip.strip() + ":" + port.strip()# print(proxy)# 175.44.109.195:9999self.test_proxy(proxy)def test_proxy(self, proxy):'''测试代理IP是否可用'''proxies = {'http': 'http://{}'.format(proxy),'https': 'https://{}'.format(proxy),}# 参数类型# proxies# proxies = {'协议': '协议://IP:端口号'}# timeout 超时设置 网页响应时间3秒 超过时间会抛出异常try:resp = requests.get(url=self.test_url, proxies=proxies, headers=self.headers, timeout=3)# 获取 状态码为200 if resp.status_code == 200:print(proxy, '\033[31m可用\033[0m')# 可以的IP 写入文本以便后续使用self.file.write(proxy)else:print(proxy, '不可用')except Exception as e:print(proxy, '不可用')def crawl(self):'''执行函数'''# 快代理每页url 的区别# https://www.kuaidaili.com/free/inha/1/# https://www.kuaidaili.com/free/inha/2/# .......# 提供的免费ip太多# 这里只获取前100页提供的免费代理IP测试for i in range(1, 101):# 拼接完整的urlpage_url = self.url.format(i)# 注意抓取控制频率time.sleep(random.randint(1, 4))self.get_proxy(url=page_url)# 执行完毕关闭文本self.file.close()if __name__ == '__main__':ip = IpPool()ip.crawl()

测试完这里博主的脸可能比较黑吧, 竟没几个可以用的!!!
由于提供的免费IP可用的机率很小
想构建自己的IP池的小伙伴, 可以去获取其它代理, 提供的免费代理IP.

这里给大家提供几个博主当时测试时可以使用的IP

159.203.44.177:3128

203.202.245.62:80

8.210.88.234:3128

89.187.177.106:80

89.187.177.106:80

96.113.165.182:3128

IP的响应速度根据你机器所在的地理位置不同而有差异

作者:淮南子.
来源:CSDN
版权声明:本文为博主原创文章,原创不易,请尊重原创转载请附上博文链接!

python3之爬虫代理IP的使用+建立代理IP池相关推荐

  1. python爬虫隐藏ip_Python3网络爬虫之使用User Agent和代理IP隐藏身份

    本文介绍了Python3网络爬虫之使用User Agent和代理IP隐藏身份,分享给大家,具体如下: 运行平台:Windows Python版本:Python3.x IDE:Sublime text3 ...

  2. 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量

    前言:本来准备写一个刷空间留言的脚本,然而kb TX,无限循环空间验证码.上午还傻x的学验证码识别,后来才发现根本发不了留言,即使填的是对的,仍然继续弹出.无奈,睡了一觉,开始搞新玩意–代理IP!其实 ...

  3. Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

    转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 黑 ...

  4. Python3网络爬虫开发实战,IP代理池的维护

    我们在上一节了解了代理的设置方法,利用代理我们可以解决目标网站封 IP 的问题,而在网上又有大量公开的免费代理,其中有一部分可以拿来使用,或者我们也可以购买付费的代理 IP,价格也不贵.但是不论是免费 ...

  5. Python3网络爬虫(四):使用User Agent和代理IP隐藏身份

    运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article ...

  6. Python3网络爬虫使用User Agent和代理IP隐藏身份

    运行平台:Windows  Python版本:Python3.x  IDE:PyCharm3.6 转载自:http://blog.csdn.net/c406495762/article/details ...

  7. python爬虫ip代理池_爬虫教程-Python3网络爬虫开发——IP代理池的维护

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 准备工作 要实现IP代理池我们首先需要成功安装好了 Redis 数据库并启动服务,另外还需要安装 Aiohttp.Requests.RedisPy.PyQ ...

  8. 爬虫工具之selenium(五)-建立代理IP池

    主要思路是分两步:第一步判断代理IP是否有效,第二步爬取免费网站代理IP,第三步循环判断爬取的代理IP是否有效 一.判断代理IP是否有效 proxies:代理,分为http与https两种,爬取不同网 ...

  9. Python爬虫方式抓取免费http代理IP

    我们新手在练手的时候,常常需要一些代理IP进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买爬虫代理IP就显得没必要(大款忽略),今天跟大家分享一下,如果使用爬虫抓取免费 ...

最新文章

  1. client-go删除job同时删除job关联的pod
  2. grunt 0.4.1构建工具入门实践(转)
  3. NumPy之:标量scalars
  4. ajaxfileupload 返回值_ajaxFileUpload上传文件返回json无法解析
  5. CSS之background-size属性
  6. 学好Python爬取京东知乎价值数据
  7. 分红酒(广度优先搜索)
  8. BZOJ 1568 Blue Mary开公司
  9. PyCharm大全(转)
  10. Java中的Flyweight设计模式
  11. Python 进阶篇
  12. Python 语言使用中遇到的问题汇总
  13. 听《正面管教》,论如何教育孩子
  14. linux 串口操作
  15. 燕教授使用体验,从漱口水到牙膏
  16. NB-IoT APN相关知识
  17. git checkout -b 报错
  18. OpenGL扩展之点精灵的使用
  19. Python pycharm环境 飞机大战游戏代码 以及打包成exe教程
  20. VS系列编译器安装破解版VA_X.dll插件

热门文章

  1. rstp协议学习笔记
  2. RSTP协议的原理与应用【eNSP实现】
  3. Simple Schnorr Multi-Signatures with Applications to Bitcoin 学习笔记
  4. 画一个超帅的智能之机器人_霸气帅气机器人怎么画,智能机器人
  5. 变成机器人 尼尔机械纪元_尼尔机械纪元竟然是一个外包游戏?
  6. CANoe-Intel模式和Motorola模式的区别
  7. python爱情的甜蜜
  8. 微软又出大招!ChatGPT将加入云服务!
  9. 推荐!国外程序员整理的 C++ 资源大全
  10. Kotlin 设计模式及实战 (持续更新中......)