首页 > 其他分享 >如何获取高质量的爬虫ip

如何获取高质量的爬虫ip

时间:2023-03-14 09:34:15浏览次数:31  
标签:get SSDB ip 高质量 爬虫 代理 port

对于刚学爬虫的程序员来说,解决爬虫封ip问题多数都是百度搜索免费的爬虫代理使用,我们都知道这类你代理可用率极低,这种爬虫ip时效还很短,这大大的增加了工作效率得不偿失。

免费爬虫ip的采集也很简单,无非就是:访问页面页面 —> 正则/xpath提取 —> 保存

如何保证爬虫ip质量?

可以肯定免费的爬虫ip大部分都是不能用的,不然别人为什么还提供付费的(不过事实是很多代理商的付费IP也不稳定,也有很多是不能用)。所以采集回来的爬虫ip不能直接使用,可以写检测程序不断的去用这些代理访问一个稳定的网站,看是否可以正常使用。这个过程可以使用多线程或异步的方式,因为检测爬虫ip是个很慢的过程。

采集回来的爬虫ip如何存储?

这里不得不推荐一个高性能支持多种数据结构的NoSQL数据库SSDB,用于代理Redis。支持队列、hash、set、k-v对,支持T级别数据。是做分布式爬虫很好中间存储工具。

如何让爬虫更简单的使用这些ip?

答案肯定是做成服务咯,python有这么多的web框架,随便拿一个来写个api供爬虫调用。这样有很多好处,比如:当爬虫发现代理不能使用可以主动通过api去delete代理IP,当爬虫发现代理池IP不够用时可以主动去refresh代理池。这样比检测程序更加靠谱。

代理池由四部分组成:

ProxyGetter:

爬虫ip获取接口,目前有几个免费代理源,每调用一次就会抓取这几个网站的最新代理放入DB,可自行添加额外的爬虫ip获取接口;

DB:

用于存放代理IP,现在暂时只支持SSDB。至于为什么选择SSDB,大家可以参考这篇文章,个人觉得SSDB是个不错的Redis替代方案,如果你没有用过SSDB,安装起来也很简单,可以参考这里;

Schedule:

计划任务用户定时去检测DB中的代理可用性,删除不可用的代理。同时也会主动通过ProxyGetter去获取最新代理放入DB;

ProxyApi:

代理池的外部接口,由于现在这么代理池功能比较简单,花两个小时看了下Flask,愉快的决定用Flask搞定。功能是给爬虫提供get/delete/refresh等接口,方便爬虫直接使用。

我是在github上面看到的,这里也会把过程记录下来:

1、下载源码:

git clone [email protected]:jhao104/proxy_pool.git

或者直接到https://github.com/jhao104/proxy_pool 下载zip文件

2、安装:

pip install -r requirements.txt

3、配置Config.init:

# Config.ini 为项目配置文件
# 配置DB
type = SSDB       # 如果使用SSDB或redis数据库,均配置为SSDB
host = localhost  # db host
port = 8888       # db port
name = proxy      # 默认配置
# 配置 ProxyGetter
freeProxyFirst  = 1  # 这里是启动的抓取函数,可在ProxyGetter/getFreeProxy.py 扩展
freeProxySecond = 1
....
# 配置 HOST (api服务)
ip = 127.0.0.1       # 监听ip,0.0.0.0开启外网访问
port = 5010          # 监听端口
# 上面配置启动后,api地址为http://jshk.com.cn/mb/reg.asp?kefu=xjy

启动

如果前面程序都完成了,接下来你可以启动程序了,进入Run目录,

运行: python main.py

查看

启动过几分钟后就能看到抓取到的爬虫ip,你可以直接到数据库中查看,推荐一个SSDB可视化工具。 也可以通过api访问 

tp://jshk.com.cn/mb/reg.asp?kefu=xjy

 查看。

API

/get GET 随机获取一个代理 None

/get_all GET 获取所有代理 None

/get_status GET 查看代理数量 None

/delete GET 删除代理 proxy=host:ip

通过浏览器输入上述API链接提取ip池

得到如下效果:

[
    "202.100.83.139:80",
    "117.127.0.197:80",
    "218.60.8.98:3129",
    "117.127.0.197:8080",
    "218.60.8.99:3129",
    "219.141.153.43:80",
    "114.215.95.188:3128",
    "219.141.153.35:80",

使用爬虫代理

        #! -*- encoding:utf-8 -*-

        import requests
        import random

        # 要访问的目标页面
        targetUrl = "http://httpbin.org/ip"

        # 要访问的目标HTTPS页面
        # targetUrl = "https://httpbin.org/ip"

        # 爬虫ip服务器
        proxyHost = "jshk.com.cn/mb/reg.asp?kefu=xjy"
        proxyPort = "31111"

        # 代理隧道验证信息
        proxyUser = "username"
        proxyPass = "password"

        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
            "host" : proxyHost,
            "port" : proxyPort,
            "user" : proxyUser,
            "pass" : proxyPass,
        }

        # 设置 http和https访问都是用HTTP代理
        proxies = {
            "http"  : proxyMeta,
            "https" : proxyMeta,
        }


        #  设置IP切换头
        tunnel = random.randint(1,10000)
        headers = {"Proxy-Tunnel": str(tunnel)}



        resp = requests.get(targetUrl, proxies=proxies, headers=headers)

        print resp.status_code
        print resp.text

标签:get,SSDB,ip,高质量,爬虫,代理,port
From: https://www.cnblogs.com/q-q56731526/p/17213734.html

相关文章

  • 记一次Elasticsearch GeoIpDownloader的启动异常排查过程
    公众号:MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握!最近碰到了ElasticsearchGeoIpDownloader相关的一个异常,花费了不少精力排查,故此记录一下,希望碰到同样问......
  • TypeScript实例_手动编译与自动编译、类型注解、接口和类的详解
    一.认识TypeScriptTypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。2012年10月,微软发布了首个公开版......
  • [整理]NOIP2021 题解
    T1秒了,直接写一个线性筛一样的东西即可。constintN=10000010;intT,x;boolok[N];intnxt[N];ilvoidInit(){for(inti=1;i<N;i++){if(ok[i])continue;......
  • Python strip()方法
    描述Pythonstrip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。语法strip()方......
  • Dokcer ip addr 查看容器内容网络地址报错
    查看容器的内部网络地址出错#查看容器的内部网络地址dockerexec-ittomcat01ipaddr#报错:OCIruntimeexecfailed:execfailed:unabletostartcontainerpr......
  • JavaScript作用域闭包(你不知道的JavaScript)
    JavaScript闭包,是JS开发工程师必须深入了解的知识。3月份自己曾撰写博客《​​JavaScript闭包​​》,博客中只是简单阐述了闭包的工作过程和列举了几个示例,并没有去刨根问底,......
  • JavaScript词法作用域(你不知道的JavaScript)
    JavaScript并不是传统的块级作用域,而是函数作用域!一、作用域1.JavaScript引擎在代码执行前会对其进行编译,在这个过程中,像vara=2这样的声明会被分解成两个独立的步骤:......
  • 前端开发爬虫首选puppeteer
    很多前端同学可能对于爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如python、php等。当然这是在nodejs前了,nodejs的出现,使得Javascript也可以用来写爬虫了。但这是......
  • 1.javaScript日期格式化转换
    //(newDate()).Format("yyyy-MM-ddhh:mm:ss.S")==>2006-07-0208:09:04.423Date.prototype.Format=function(fmt){varo={"M+":this.getMonth()+1,//mont......
  • [React][typescript]官方教程小游戏Tic-Tac-Toe
    本文记录一些跟随官方教程后的心得,按照最终版本代码逐块进行理解,包括typescript和react的一些基本操作和误区函数组件Game:最后输出的大组件,所有组件的父类Board:Game......