Python爬虫IP代理池的建立和使用
写在前面
建立Python爬虫IP代理池可以提高爬虫的稳定性和效率,可以有效避免IP被封锁或限制访问等问题。
下面是建立Python爬虫IP代理池的详细步骤和代码实现:
1. 获取代理IP
我们可以从一些代理IP网站上获取免费或付费的代理IP,或者自己租用代理IP服务。这里我们以站大爷代理为例,获取前10页的HTTP代理IP地址。
import requests
from scrapy.selector import Selector
def get_proxy_ips():
proxy_ips = []
for i in range(1, 11):
url = 'https://www.zdaye.com/free/'.format(i)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
selector = Selector(text=res.text)
trs = selector.css('#ip_list tr')
for tr in trs[1:]:
ip = tr.css('td:nth-child(2)::text').extract_first()
port = tr.css('td:nth-child(3)::text').extract_first()
proxy_ips.append('{}:{}'.format(ip, port))
return proxy_ips
2. 检测代理IP的可用性
获取到代理IP后,需要对其进行可用性的检测,筛选出可用性较高的IP地址。这里我们测试以百度为目标网站检测HTTP代理IP地址的可用性,如果响应码为200,则表明该IP地址可用。
import requests
def check_proxy_ip(ip):
url = 'http://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://' + ip, 'https': 'https://' + ip}
try:
res = requests.get(url, headers=headers, proxies=proxies, timeout=10)
if res.status_code == 200:
return True
else:
return False
except:
return False
3. 将可用的代理IP存储到池中
将可用的代理IP存储到一个IP池中,根据需要可以设置IP池的容量和存储时间。这里我们将可用的IP地址存储到redis数据库中。
import redis
def save_proxy_ips():
proxy_ips = get_proxy_ips()
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
for ip in proxy_ips:
if check_proxy_ip(ip):
r.sadd('proxy_ip_pool', ip)
4. 在爬虫程序中使用代理IP池
在爬虫程序中设置代理IP池,并在请求时随机选择一个可用的代理IP地址进行访问。这里我们使用requests库和random模块实现。
import requests
import redis
import random
def get_my_ip():
url = 'http://httpbin.org/ip'
res = requests.get(url)
return res.json()['origin']
def get_random_proxy():
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
ip = r.srandmember('proxy_ip_pool')
return ip.decode('utf-8')
# 随机选择代理IP进行访问
def crawl(url):
proxy = {'http': 'http://'+get_random_proxy(), 'https': 'https://'+get_random_proxy()}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
try:
res = requests.get(url, headers=headers, proxies=proxy, timeout=10)
if res.status_code == 200:
return res.text
else:
return None
except:
return None
总结
需要注意的是,代理IP池的建立和使用需要注意IP的有效性和时效性,及时更新池中的IP地址,以保证代理IP的可用性。同时,在使用代理IP时需要遵守相关法律法规和网站的使用协议,不得用于非法活动。
Python爬虫IP代理池的建立和使用的更多相关文章
- python开源IP代理池--IPProxys
今天博客开始继续更新,谢谢大家对我的关注和支持.这几天一直是在写一个ip代理池的开源项目.通过前几篇的博客,我们可以了解到突破反爬虫机制的一个重要举措就是代理ip.拥有庞大稳定的ip代理,在爬虫工作中 ...
- python爬虫redis-ip代理池搭建几十万的ip数据--可以使用
from bs4 import BeautifulSoupimport requests,os,sys,time,random,redisfrom lxml import etreeconn = re ...
- 设置python爬虫IP代理(urllib/requests模块)
urllib模块设置代理 如果我们频繁用一个IP去爬取同一个网站的内容,很可能会被网站封杀IP.其中一种比较常见的方式就是设置代理IP from urllib import request proxy ...
- 打造IP代理池,Python爬取Boss直聘,帮你获取全国各类职业薪酬榜
爬虫面临的问题 不再是单纯的数据一把抓 多数的网站还是请求来了,一把将所有数据塞进去返回,但现在更多的网站使用数据的异步加载,爬虫不再像之前那么方便 很多人说js异步加载与数据解析,爬虫可以做到啊,恩 ...
- 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫
前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...
- python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)
在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...
- python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...
- python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫
用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...
- 静听网+python爬虫+多线程+多进程+构建IP代理池
目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
随机推荐
- CMU15445 (Fall 2020) 之 Project#1 - Buffer Pool 详解
前言 去年暑假完成了 CMU15-445 Fall 2019 的四个实验,分别对应下述博客: CMU15445 (Fall 2019) 之 Project#1 - Buffer Pool 详解 CMU ...
- 经纬度坐标为中心点生成米距离长度半径的圆形面,含java js源码+在线绘制,代码简单零依赖
目录 java版源码 js版源码 在线绘制预览效果 关于计算的精确度 前些时间在更新我的坐标边界查询工具的时候,需要用到经纬度坐标点的距离计算,和以坐标点为中心生成一个指定距离为半径的圆,搜了一下没有 ...
- 我在 vscode 插件里接入了 ChatGPT,解决了代码变量命名的难题
lowcode 插件 已经迭代了差不多3年.作为我的生产力工具,平常一些不需要动脑的搬砖活基本上都是用 lowcode 去完成,比如管理脚手架,生成 CURD 页面,根据接口文档生成 TS 类型,生成 ...
- FFmpeg合并视频和音频文件
使用IDM下载Bilibili的视频会出现音视频分离的问题,通常文件大的是视频(没有声音),文件小的是单独的音频. 将两个文件都下载下来后,可以使用FFmpeg将其合并成一个视频文件.首先去FFmpe ...
- 阿里云 MongoDB 创建库添加用户并授权
先通过 root 进到 admin 库, 右击test 选择用户管理 测试连接
- python笔记:第六章函数&方法
1.系统函数 由系统提供,直接拿来用或是导入模块后使用 a = 1.12386 result = round(a,2) print(result) > 1.12 2.自定义函数 函数是结构化编程 ...
- 层叠样式表(CSS)3
三.层叠样式表属性 1.文字属性 font-size:字体大小 line-height:行高 font-family:字体 font-weight:粗细程度 .......等等很多,可自行学习 2.文 ...
- quarkus依赖注入之一:创建bean
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于依赖注入 对一名java程序员来说,依赖注入应该是 ...
- JDK中「SPI」原理分析
目录 一.SPI简介 1.概念 2.入门案例 2.1 定义接口 2.2 两个实现类 2.3 配置文件 2.4 测试代码 二.原理分析 1.ServiceLoader结构 2.iterator迭代方法 ...
- Maven资源导出问题所需配置
<!--在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> < ...