动态ip

>

代理ip软件

>

换ip软件

>

HTTP代理

>
Socks5代理
黑核动态ip代理
您的位置: 首页 > 新闻资讯 > 正文

Python爬虫为什么老是被封IP?

发布时间:2020-03-25 14:13:16 来源:黑核动态ip代理

分享到

  常听到很多人抱怨自己的IP因爬虫次数太多而被网站屏蔽,不得不频繁使用各种代理IP,却又因为网上的公开代理大部分都是不能使用,而又要花钱花精力去申请VIP代理,几番波折又遭屏蔽。特此写一篇如何利用Python搭建代理池的文章,以降低时间及精力成本,实现自动化获取活跃代理IP的功能。

Python爬虫为什么老是被封IP?

  运作原理:

  一:网站代理获取;

  1.爬免费代理网站的IP列表测试是否可用以及是否高匿;

  2.若都是,则放进数据库,否则丢弃;

  3.重复以上步骤;

  二:保证失效的代理能被尽快从代理池中挑出;

  1.从爬虫数据库获取IP;

  2.测试IP的可用性和匿名性;

  3.如果可以用且匿名,则保留,否则丢弃;

  4.重复以上操作;

  说明①:可建立一个爬虫程序守护程序(Daemon),有此方面需要的小伙伴可自行谷歌,在此不多做介绍。

  说明②:可建立一个对外代理信息接口,无论你用NodeJS或者Flask/Django或者PHP来写都没关系,我会在未来的更新中加上这个功能,在这篇文章中也不多做介绍。

  实现:

  建议库:requests,Beautifulsoup,re,sqlite3.

  其实,用requests库获取代理网站页面,用Beautifulsoup和re两库来进行代理信息获取,用sqlite3来对这些信息进行存取。

  如果有必要(如代理网站有反爬虫策略时),可用PhantomJS,或用相应库进行数据清理(如base64解码)。

  下面简单展示一下各部分的代码:

  首先时选择多个能爬取代理且不容易被屏蔽IP的网站,此处以poxy-list.org为例:

  BASE_URL="https://proxy-list.org/english/index.php?p="

  #IP地址及端口的正则

  Re_Pattern_IP=re.compile("(.*):")

  Re_Pattern_PORT=re.compile(":(.*)")

  #网站有11页,所以循环11次获取所有代理IP及端口

  for startingURL_Param in range(1,11):

  HTML_ProxyPage=requests.get(BASE_URL+str(startingURL_Param)).content

  soup=bs(HTML_ProxyPage,"html.parser")

  for Raw_ProxyInfo in soup.find_all("ul",{"class":None}):

  #此网站有用Base64简单对代理进行了加密,所以这里对其解码

  ip_port=base64.b64decode(Raw_ProxyInfo.find("li",{"class":"proxy"}).text.replace("Proxy('","").replace("')",""))

  #接下来利用正则从网页数据中提取我们需要的信息

  IP=re.findall(Re_Pattern_IP,ip_port)[0]

  PORT=re.findall(Re_Pattern_PORT,ip_port)[0]

  TYPE=Raw_ProxyInfo.find("li",{"class":"https"}).text

  接下来是一段简易代理池框架类的代码,提供代理数据库的添加、删除、可连接性检测、匿名性检测:

  class ProxyPool:

  #初始化爬虫池数据库

  def __init__(self,ProxyPoolDB):

  self.ProxyPoolDB=ProxyPoolDB

  self.conn=sqlite3.connect(self.ProxyPoolDB,isolation_level=None)

  self.cursor=self.conn.cursor()

  self.TB_ProxyPool="TB_ProxyPool"

  self.cursor.execute("CREATE TABLE IF NOT EXISTS"+self.TB_ProxyPool+"(ip TEXT UNIQUE,port INTEGER,protocol TEXT)")

  #添加代理IP进代理池的接口

  def addProxy(self,IP,PORT,PROTOCOL):

  self.cursor.execute("INSERT OR IGNORE INTO"+self.TB_ProxyPool+"(ip,port,protocol)VALUES(?,?,?)",[IP,PORT,PROTOCOL])

  #检查代理的匿名性及可连接性

  def testConnection(self,IP,PORT,PROTOCOL):

  proxies={PROTOCOL:IP+":"+PORT}

  try:

  OrigionalIP=requests.get("http://icanhazip.com",timeout=REQ_TIMEOUT).content

  MaskedIP=requests.get("http://icanhazip.com",timeout=REQ_TIMEOUT,proxies=proxies).content

  if OrigionalIP!=MaskedIP:

  return True

  else:

  return False

  except:

  return False

  #删除代理IP对应的数据库记录

  def delRecord(self,IP):

  self.cursor.execute("DELETE FROM"+self.TB_ProxyPool+"WHERE ip=?",(IP,))

  #下面是对代理池进行去“失效IP”的代码:

  #循环代理池,逐行测试IP地址端口协议是否可用

  def cleanNonWorking(self):

  for info in self.cursor.execute("SELECT*FROM"+self.TB_ProxyPool).fetchall():

  IP=info[0]

  PORT=str(info[1])

  PROTOCOL=info[2].lower()

  isAnonymous=self.testConnection(IP,PORT,PROTOCOL)

  if isAnonymous==False:

  #这条代理的可用性失效了,从数据库里删除

  self.delRecord(IP)

  #通过检测icanhazip.com回显来检测可用性及匿名性

  def testConnection(self,IP,PORT,PROTOCOL):

  proxies={PROTOCOL:IP+":"+PORT}

  try:

  OrigionalIP=requests.get("http://icanhazip.com",timeout=REQ_TIMEOUT).content

  MaskedIP=requests.get("http://icanhazip.com",timeout=REQ_TIMEOUT,proxies=proxies).content

  if OrigionalIP!=MaskedIP:

  return True

  else:

  return False

  except:

  return False

  放在此文章中的是代理池的核心代码,旨是提供各位读者能够自己实现的思路及参考。


相关资讯

为什么使用python采集都使用ip代理软件

多线程、异步与动态代理使用代理IPweb爬虫在使用代理ip采集数据的时候,经常会碰到有反采集策略规则的WAF,使得本来很简单事情变得复杂起来,使得很多人无法获取

来源:黑核混拨ip代理

2019-01-10 10:34:30

身为python爬虫程序员如何寻找稳定的代理ip软件

身为python爬虫的程序猿,不懂的时候一般都善于动脑且有一定动手能力。对于稳定代理IP,没有就去寻找嘛!google、度娘,输入关键字:代理IP,前几页几乎都

来源:黑核混拨ip代理

2019-01-10 15:58:02

有什么代理ip软件能提高Python爬虫的工作效率

Python是一种动态解释型的编程语言,它可以在Windows、UNIX、MAC等多种操作系统以及Java、.NET开发平台上使用。如果我们想在网络上快速抓取数

来源:黑核混拨ip代理

2019-01-10 18:00:45

python爬虫如何使用代理ip软件避开反爬策略

对于python爬虫来说,最常遇见的难题就是来自网站的反爬策略。其实,python爬虫的固定套路也就那么多,各种网站的反爬策略也是针对这些固定的爬虫套路衍生出来

来源:黑核混拨ip代理

2019-01-11 13:51:27

为什么Python爬虫经常被封?有什么办法解决

如果你一直被网站封杀却找不到原因,那么这篇文章获取能帮助到你。今天小编重点给大家讲一下,网络爬虫被封的常见原因。一、检查JavaScript如果出现页面空白、缺

来源:黑核混拨ip代理

2019-01-14 15:46:14

为什么网站要限制python爬虫大量抓取

很多从事python爬虫的网友,在采集网站信息时常遇见一些数据显示在浏览器上却无法抓取的情况。这可能是因为对方有意不让爬虫抓取信息,当你的IP地址被网站封杀,就

来源:黑核混拨ip代理

2019-01-14 17:03:45

代理IP对python爬虫有用吗?为什么说代理IP方便我们上网

HTTP代理IP对python爬虫有何作用?现如今,网络python爬虫早已不是什么陌生词汇,许多开发者在爬取数据时最常遇见的就是IP地址被网站封禁。究其原因,

来源:黑核混拨ip代理

2019-01-16 16:11:50

爬虫技术工程师为什么离不开ip代理

说到爬虫,自然离不开爬虫代理地址。爬虫是一门随着互联网大数据而应运而生的产物,它主要是为了在海量的网络数据中采集分析有效的数据而诞生的一门技术。无需多言,爬虫技

来源:黑核混拨ip加速器网

2018-12-28 15:24:23

换ip软件帮您解决ip被封烦恼!

换ip软件帮您解决ip被封烦恼!我想做互联网工作的基本上都需要换下ip吧,很多时候我们做推广经常被封账号,特别是同一个IP自问自答马上封你没商量,但是这些推广也

来源:黑核混拨IP网

2018-12-25 15:52:02

Python爬虫为什么老是被封IP?

常听到很多人抱怨自己的IP因爬虫次数太多而被网站屏蔽,不得不频繁使用各种代理IP,却又因为网上的公开代理大部分都是不能使用,而又要花钱花精力去申请VIP代理,几

来源:黑核动态ip代理

2020-03-25 14:13:16

在线客服
讨论QQ群
客服电话
13318873961