国外免费代理ip(socks5代理ip免费)

作者:仙焕来源:Python技术经常有粉丝在后台留言,问:大哥,你的爬虫运行时怎么报错了?我让他把错误信息发给我,他看了之后叹了口气。大部分粉丝就是拿着代码开始

作者:仙焕

来源:Python技术

经常有粉丝在后台留言,问:大哥,你的爬虫运行时怎么报错了?

我让他把错误信息发给我,他看了之后叹了口气。

大部分粉丝就是拿着代码开始跑,然后等结果。他们根本没有仔细阅读和理解源代码。遇到错误,他们直接过来问。

爬虫源代码报告的大部分错误都是由于频繁访问目标网站,导致目标网站出现错误或无数据返回。

目前大部分网站都有反抓取措施。如果在一定时间内,IP请求数量超过一定阈值,就会触发反抓取措施,拒绝访问,也就是我们常说的“屏蔽IP”。

那么如何解决这个问题呢?

一种解决方法是减少访问频率,一次访问后等待一定时间,然后再次访问。这种方法对于防爬措施不严的网站是有效的。

如果遇到防爬措施严格的网站,访问次数多了还是会被屏蔽。有时你需要抓取数据。这种解决方案会使数据采集周期特别长。

第二个解决方案是使用代理IP。我不断切换IP访问,让目标网站以为是不同的用户在访问,从而绕过反抓取措施。这也是最常见的方式。

那么,我们就面临一个问题:哪里有那么多独立的IP地址?

当然,最便捷的方式还是花钱买服务。这种付费IP一般都是稳定可靠的。

今天就来说说不花钱免费获得代理IP的方法。

ProxyPool 简介

ProxyPool是crawler的代理IP池。其主要功能是定期收集网上发布的免费代理进行验证入库,定期验证入库代理,保证代理的可用性。它提供了API和CLI使用模式。

同时还可以拓展代理来源,增加代理池IP的质量和数量。

获取项目

我们可以通过两种方式获得ProxyPool项目。

第一种是通过命令行下载:

git克隆git @ github . com:jhao 104/proxy _ pool . git

第二种是下载相应的zip压缩包:

国外免费代理ip(socks5代理ip免费)插图

安装依赖

我们得到项目后,转到项目的根目录,运行下面的代码,安装项目所需的依赖包:

pip安装-r要求. txt

修改配置文件

为了在本地运行项目,我们需要为本地环境修改一些配置。打开项目中的setting.py文件,并根据本地环境和要求修改配置。

# setting.py为项目配置文件# = & # 34;0.0.0.0"# IPPORT = 5000 #监听端口#配置数据库DB _ CONN = & # 39redis://:pwd @ 127 . 0 . 0 . 1:8888/0 & # 39;# Configure proxy Fetcher proxy _ Fetcher =[& # 34;freeProxy01 & # 34,#这里是启用的代理提取方法的名称,所有提取方法都位于fetch er/proxy fetcher . py & # 34;freeProxy02 & # 34, # ...]主要修改的配置是监听端口(PORT)、Redis数据库的配置(DB_CONN)和启用的代理方法名(PROXY_FETCHER)。

启动项目

修改完配置,我们就可以愉快的使用了。

这个项目一般分为两部分:抓取代理IP和访问代理IP。

如果要启用搜索代理IP的服务,请直接运行以下命令:

python proxyPool.py计划

启动后,您可以看到以下控制台信息:

国外免费代理ip(socks5代理ip免费)插图(1)

该计划将抓取每隔一段时间,直到有一定数量的可用IP在我们的IP池。

实际上,作者在这个项目中使用的是从一些免费代理网站收集IP,然后测试IP的可用性。如果可用,它将存储在Redis中,如果不可用,它将被丢弃。

所以你可以自己写程序来实现这个逻辑。

使用代理 IP

要使用代理IP,您需要启动webApi服务:

python代理池. py服务器

web服务启动后,默认会启动http://127.0.0.1:5010的api服务:

国外免费代理ip(socks5代理ip免费)插图(2)

如果想在爬虫代码中使用,可以把这个api打包成一个函数,直接使用,例如:

import requests def get _ proxy():return requests . get(& # 34;http://127 . 0 . 0 . 1:5010/get/& # 34;).JSON()def delete _ proxy(proxy):requests . get(& # 34;http://127.0.0.1:5010/delete/?proxy = { } & # 34。format(proxy))#您的蜘蛛codedef getHtml(): #....retry_count = 5 proxy = get_proxy()。获取(& # 34;代理& # 34;)而retry _ count & gt0:try:html = requests . get(& # 39;http://www . example . com & # 39;,proxies = { & # 34http & # 34: "http://{ } & # 34;。format(proxy)}) #使用代理访问return HTML exception:retry _ count-= 1 #删除代理池中的代理delete_proxy(proxy) return None总结作为一个IP代理池对于学习来说,这一项已经获取的足够用了,但是对于一些复杂的爬虫项目或者商业项目来说,可能会比较困难。毕竟这个爬行免费的质量肯定没那么好,不稳定很正常。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/109378.html

发表回复

登录后才能评论