0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解决爬虫被封的问题

电子工程师 来源: fqj 2019-04-24 09:47 次阅读

如果你在爬虫过程中有遇到“您的请求太过频繁,请稍后再试”,或者说代码完全正确,可是爬虫过程中突然就访问不了,那么恭喜你,你的爬虫被对方识破了,轻则给予友好提示警告,严重的可能会对你的ip进行封禁,所以代理ip那就尤为重要了。今天我们就来谈一下代理IP,去解决爬虫被封的问题。

网上有许多代理ip,免费的、付费的。大多数公司爬虫会买这些专业版,对于普通人来说,免费的基本满足我们需要了,不过免费有一个弊端,时效性不强,不稳定,所以我们就需要对采集的ip进行一个简单的验证。

1.目标采集

本文主要针对西刺代理,这个网站很早之前用过,不过那个时候它还提供免费的api,现在api暂不提供了,我们就写个简单的爬虫去采集。

打开西刺代理,有几个页面,果断选择高匿代理。

如何解决爬虫被封的问题

Chrome浏览器右键检查查看network,不难发现,每个ip地址都在td标签中,对于我们来说就简单许多了,初步的想法就是获取所有的ip,然后校验可用性,不可用就剔除。

如何解决爬虫被封的问题

定义匹配规则

importreip_compile=re.compile(r'(d+.d+.d+.d+)')#匹配IPport_compile=re.compile(r'(d+)')#匹配端口

2.校验 这里我使用淘宝ip地址库检验可用性

2.1、关于淘宝IP地址库

目前提供的服务包括:1. 根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家、省、市和运营商。2. 用户可以根据自己所在的位置和使用的IP地址更新我们的服务内容。我们的优势:1. 提供国家、省、市、县、运营商全方位信息,信息维度广,格式规范。2. 提供完善的统计分析报表,省准确度超过99.8%,市准确度超过96.8%,数据质量有保障。

2.2、接口说明

请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字符串]例:http://ip.taobao.com/service/getIpInfo2.php?ip=111.177.181.44

响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商

返回数据格式:

{"code":0,"data":{"ip":"210.75.225.254","country":"u4e2du56fd","area":"u534eu5317","region":"u5317u4eacu5e02","city":"u5317u4eacu5e02","county":"","isp":"u7535u4fe1","country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000","county_id":"-1","isp_id":"100017"}}

其中code的值的含义为,0:成功,1:失败。

注意:为了保障服务正常运行,每个用户的访问频率需小于10qps。我们先通过浏览器测试一下

输入地址http://ip.taobao.com/service/getIpInfo2.php?ip=111.177.181.44

如何解决爬虫被封的问题

再次输入一个地址http://ip.taobao.com/service/getIpInfo2.php?ip=112.85.168.98

代码操作

importrequestscheck_api="http://ip.taobao.com/service/getIpInfo2.php?ip="api=check_api+iptry:response=requests.get(url=api,headers=api_headers,timeout=2)print("ip:%s 可用"%ip)exceptExceptionase:print("此ip %s 已失效:%s"%(ip,e))

3.代码

代码中加入了异常处理,其实自己手写的demo写不写异常处理都可以,但是为了方便其他人调试,建议在可能出现异常的地方加入异常处理。

importrequestsimportreimportrandomfrombs4importBeautifulSoupua_list=[ "Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.109Safari/537.36", "Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/62.0.3202.75Safari/537.36", "Mozilla/5.0(Macintosh;IntelMacOSX10_13_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.119Safari/537.36", "Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/45.0.2454.101Safari/537.36" ]defip_parse_xici(page):""":param page:采集的页数:return:""" ip_list=[] forpginrange(1,int(page)): url='http://www.xicidaili.com/nn/'+str(pg) user_agent=random.choice(ua_list) my_headers={ 'Accept':'text/html,application/xhtml+xml,application/xml;', 'Accept-Encoding':'gzip,deflate,sdch', 'Accept-Language':'zh-CN,zh;q=0.8', 'Referer':'http://www.xicidaili.com/nn', 'User-Agent':user_agent } try: r=requests.get(url,headers=my_headers) soup=BeautifulSoup(r.text,'html.parser') exceptrequests.exceptions.ConnectionError: print('ConnectionError') else: data=soup.find_all('td') #定义IP和端口Pattern规则 ip_compile=re.compile(r'(d+.d+.d+.d+)')#匹配IP port_compile=re.compile(r'(d+)')#匹配端口 ips=re.findall(ip_compile,str(data))#获取所有IP ports=re.findall(port_compile,str(data))#获取所有端口 check_api="http://ip.taobao.com/service/getIpInfo2.php?ip=" foriinrange(len(ips)): ifi< len(ips):                     ip = ips[i]                     api = check_api + ip                     api_headers = {                         'User-Agent': user_agent                     }                     try:                         response = requests.get(url=api, headers=api_headers, timeout=2)                         print("ip:%s 可用" % ip)                     except Exception as e:                         print("此ip %s 已失效:%s" % (ip, e))                         del ips[i]                         del ports[i]             ips_usable = ips             ip_list += [':'.join(n) for n in zip(ips_usable, ports)]  # 列表生成式             print('第{}页ip采集完成'.format(pg))     print(ip_list)if __name__ == '__main__':     xici_pg = input("请输入需要采集的页数:")     ip_parse_xici(page=xici_pg)

运行代码:

日志

4.为你的爬虫加入代理ip

建议大家可以把采集的ip存入数据库,这样每次爬虫的时候直接调用即可,顺便提一下代码中怎么加入代理ip。

importrequestsurl='www.baidu.com'headers={ "User-Agent":"Mozilla/5.0(Macintosh; IntelMacOSX10_13_6)AppleWebKit/537.36(KHTML, likeGecko)Chrome/72.0.3626.119Safari/537.36",}proxies={ "http":"http://111.177.181.44:9999", #"https":"https://111.177.181.44:9999", } res=requests.get(url=url,headers=headers,proxies=proxies)

好了,妈妈再也不担心我爬虫被封了,代码可从文中复制粘贴。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IP
    IP
    +关注

    关注

    5

    文章

    1701

    浏览量

    149502
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68521
  • 爬虫
    +关注

    关注

    0

    文章

    82

    浏览量

    6867

原文标题:听说你的爬虫被封了?

文章出处:【微信号:atleadai,微信公众号:LeadAI OpenLab】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python数据爬虫学习内容

    ,利用爬虫,我们可以解决部分数据问题,那么,如何学习Python数据爬虫能?1.学习Python基础知识并实现基本的爬虫过程一般获取数据的过程都是按照 发送请求-获得页面反馈-解析并且存储数据 这三个
    发表于 05-09 17:25

    应对反爬虫的策略

    被机器人肆意地滥用,网站的安全和流量费用就会面临严重威胁,因此很多网站都会想办法防止爬虫程序接入。为了能够更好的爬虫,我们需要使用可变的ip地址,建立网络爬虫的第一原则是:所有信息都可以伪造。但是有
    发表于 12-12 17:39

    如何提高爬虫采集效率

    次数  单次爬虫的主要把时间消耗在网络请求等待响应上面,所以能减少网站访问就减少网站访问,既减少自身的工作量,也减轻网站的压力,还降低被封的风险。  第一步要做的就是流程优化,尽量精简流程,一些数据
    发表于 12-23 17:16

    网络爬虫之关于爬虫http代理的常见使用方式

    在做爬虫的过程中,如果你爬取的频率过快,不符合人的操作模式。有些网站的反爬虫机制通过监测到你的IP异常,访问频率过高。就会对你进行封IP处理。目前已有比较多的第三方平台专门进行代理IP的服务,那
    发表于 04-26 17:43

    网络爬虫nodejs爬虫代理配置

    随着互联网的发展进步,现在互联网上也有许多网络爬虫。网络爬虫通过自己爬虫程序向目标网站采集相关数据信息。当然互联网的网站会有反爬策略。比如某电商网站就会限制一个用户IP的访问频率,从而出现验证码
    发表于 09-01 17:23

    Golang爬虫语言接入代理?

    golang语言也是爬虫中的一种框架语言。当然很多网络爬虫新手都会面临选择什么语言适合于爬虫。一般很多爬虫用户都会选择python和java框架语言来写
    发表于 09-09 17:41

    什么是爬虫

    什么是爬虫爬虫的价值?最简单的python爬虫爬虫基本架构
    发表于 11-05 06:13

    如何运行imdb爬虫

    imdbcn爬虫实例 imdbcn网站结构分析 创建爬虫项目 运行imdb爬虫
    发表于 11-05 07:07

    0基础入门Python爬虫实战课

    大数据时代,有两种技能可以给自己增加竞争优势。一种是数据分析,旨在挖掘数据的价值,做出最佳决策;另一种是数据获取,即爬虫。学会它,相当于在数据时代掌握了攫取能源的最有效方式。谷歌百度等搜索引擎的崛起
    发表于 07-25 09:28

    python网络爬虫概述

    网络爬虫(Web Spider)又称网络蜘蛛、网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫按照系统结构和实现技术,大致可分为一下几种类型:通用网络爬虫:就是尽可能
    发表于 03-21 16:51

    python爬虫入门教程之python爬虫视频教程分布式爬虫打造搜索引擎

    本文档的主要内容详细介绍的是python爬虫入门教程之python爬虫视频教程分布式爬虫打造搜索引擎
    发表于 08-28 15:32 29次下载

    爬虫是如何实现数据的获取爬虫程序如何实现

    进入大数据时代,爬虫技术越来越重要,因为它是获取数据的一个重要手段,是大数据和云计算的基础。那么,爬虫到底是如何实现数据的获取的呢?今天和大家分享的就是一个系统学习爬虫技术的过程:先掌握爬虫
    发表于 01-02 16:30 10次下载
    <b class='flag-5'>爬虫</b>是如何实现数据的获取<b class='flag-5'>爬虫</b>程序如何实现

    Python爬虫 你真的会写爬虫吗?

    你以为你真的会写爬虫了吗?快来看看真正的爬虫架构!
    的头像 发表于 05-02 17:02 3893次阅读
    Python<b class='flag-5'>爬虫</b> 你真的会写<b class='flag-5'>爬虫</b>吗?

    何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法

    何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法 在Python爬虫过程中,遇到中文乱码问题是常见的情况。乱码问题主要是由于编码不一致所导致的,下面我将详细介绍
    的头像 发表于 01-12 15:11 2333次阅读

    详细解读爬虫多开代理IP的用途,以及如何配置!

    爬虫多开代理IP是一种在爬虫开发中常用的技术策略,主要用于提高数据采集效率、避免IP被封禁以及获取地域特定的数据。
    的头像 发表于 09-14 07:55 491次阅读