题目描述


题目链接:http://glidedsky.com/level/crawler-ip-block-1

题目分析

  本题是一道关于ip代理的题目,要想解决此题,必须获取大量的IP地址。目前网络上有很多免费的代理,但是经过我的测试,这些代理的可用性不强。提供付费代理的公司也有很多,但是大多价格不菲,我们没有必要为了做这一道题而花费大量的钱财。我最终选择的方案是使用付费代理公司的新用户免费体验服务,芝麻IP代理为新注册的用户提供了24小时10000个代理的体验服务,可以很好的满足本题对代理的使用需求,当然大家也可以自行选择其他的代理提供商,大部分都会有新用户免费体验的功能,没有必要为了做这道题而花钱购买代理。下面将介绍一下芝麻代理的使用方法。
  打开芝麻IP代理的官网,按照提示信息进行账号注册和身份认证,这两项都完成之后即可获得24小时10000个短时ip使用权(不知道此活动什么时候会取消)。点击网站上方的“获取IP”进入IP提取配置页面,如下图所示。

  首先选择提取类型,因为我的免费试用已经过期了,所以无法演示应该选择哪种类型,大家根据下拉列表应该能找到免费使用的类型。之后再设置一下提取数量,我在做这道题的时候设置的提取数量是50,不建议提取数量过大,因为IP提取出来之后只有25分钟的使用期,也不建议将提取数量设置为1,因为1秒钟最多只能请求一次IP。上面的两个选项设置好了之后,其余的可以采用默认设置,之后点击“生成API链接”即可看到提取IP的API链接,如下图所示。

  针对本题,我们选用“直连IP”的API链接即可。我们可以点击右侧的“打开链接”以查看是否可以提取到指定数量的IP,正常情况下会弹出一个新的页面,上面显示了所有提取出来的IP地址和端口号,如下图所示。

  现在我们已经有了提取IP的API链接了,但是此API还无法直接在python代码中使用,我们需要先将自己电脑的IP地址加入到白名单中。百度搜索“IP地址”,即可看到自己电脑使用的公网IP地址,将此IP地址复制下来,然后回到芝麻IP代理的网站中,点击上方的用户名,即可在页面左侧看到“IP白名单”选项,如下图所示。

  点击“IP白名单”,根据页面提示将刚才复制的IP地址添加进去即可。我用的是移动的网络,在添加的时候提示我不支持添加移动网络IP,此问题可以找客服给解决。
  IP地址的问题解决之后,剩下的就和爬虫基础题2差不多了,只不过在每次请求页面数据之前,都需要先获取一个新的IP地址,之后将此IP作为代理来请求页面数据。因为获取到的IP不一定可用,或者即便可用,网络状况也非常差,所以请求数据页面时加了5秒的超时时间,如果5秒钟之后还得不到页面数据,那么就换下一个IP代理重新请求。在实际爬取过程中发现,有的时候即便是用代理IP,也会出现403的情况,因此数据页请求完毕之后需要判断一下状态码是否为200,若不是,则更换一个新的IP重新请求数据页。此次数据爬取耗时会比之前的两道基础题长,因此建议用文件记录下每个数据页的数据,这样万一爬取过程中发生异常导致程序终止,可以避免再从头开始运行爬虫,而只需要从异常发生时正在爬取的那一页开始运行即可。

源代码

强烈建议大家趁着免费IP还没过期,把IP屏蔽2也一块做了,代码都是一样的。

from bs4 import BeautifulSoup
import requests
import re
import osparams = {'email': '',  #  你的邮箱地址'password': '', #  你的密码'_token': 's9OikhiHKa8CoplaD7g8sxXx6XnsCc5HRGj24znl',
}def get_proxy():num = 50url = 'http://webapi.http.zhimacangku.com/getip?num={}&type=1&pro=&city=0&yys=0&port=1&pack=156622&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=2&regions='.format(num)for _ in range(140):rp = requests.get(url)proxy = rp.text.split('\r\n')if proxy[0].find('code') >= 0:print('获取ip失败,即将进行下一次尝试')continueproxy.remove('')for p in proxy:yield pdef login():url = 'http://glidedsky.com/login'session = requests.Session()r = session.get(url)html = r.textresult = re.search('input type="hidden" name="_token" value="(.*?)"', html)_token = result.group(1)params['_token'] = _tokensession.post(url=url, data=params)return sessiondef parse(html, idx):page_sum = 0soup = BeautifulSoup(html, 'lxml')numbers = soup.select('.col-md-1')f = open('log.txt', mode='at')f.write(str(idx) + ':\t')for number in numbers:page_sum += int(number.string.strip())f.write(number.string.strip() + '\t')f.write(str(page_sum) + '\n')f.close()return page_sumdef crawler():session = login()base_url = 'http://glidedsky.com/level/web/crawler-ip-block-2?page='k = 1ans = 0if not os.path.exists('log.txt'):f = open('log.txt', mode='wt')f.close()for proxy in get_proxy():if k == 1001:print('answer: ' + str(ans))breakif proxy is None:print('proxy is None')continueproxies = {'http': 'http://' + proxy,'https': 'https://' + proxy,}url = base_url + str(k)try:r = session.get(url, proxies=proxies, timeout=5)except requests.Timeout:print('当前ip可能有点问题,将会自动更换下一个')continueif r.status_code == 403:print('此IP已经被封禁,将更换下一个IP重新爬取')if r.status_code != 200:continueans += parse(r.text, k)print(str(k) + '\t\t' + str(ans))k += 1print(ans)if __name__ == '__main__':crawler()

GlidedSky爬虫-IP屏蔽1相关推荐

  1. 代理IP如何解决爬虫IP被封

    网络爬虫在访问网站的时候,经常使爬虫IP被封.那遇到这种情况呢,大家都会想到用代理IP来解决这个苦恼.那么代理IP是如何解决爬虫IP被封的呢?       通常情况下,代理IP都是通过把真实的爬虫IP ...

  2. 爬虫ip代理对高匿代理ip的重要性

    对于爬虫来说,在听到ip代理的时候,听得最多的莫过于透明代理.匿名代理.高匿代理这几个词了,那么分别是什么意思呢?互相之间有什么样的区别呢? 为什么说爬虫ip代理一定要使用高匿代理呢? 带着这些问题, ...

  3. 爬虫ip在使用中被封了如何解决 ?

    爬虫是最近几年非常热门的互联网抓取技术,能够帮助数据公司进行大数据分析,极大的降低人工成本. 那么在爬虫进行批量采集的时候,有时候ip地址也会被封,这具体是什么原因引起的? 为了能够高效的爬虫工作,往 ...

  4. 网页爬虫为什么需要爬虫ip

    在现如今数据满天飞的时代,各行各业对于公开数据的应用越发的广泛,这也就对数据采集的需求日益增多.市场需求在变大变宽,但是配套的技术人员却无法满足需求.因此,越来越多的人选择网络爬虫这个行业. 今天我们 ...

  5. 当前流行搜索引擎爬虫IP列表

    通过搜集和总结,整理出当前比较常用的搜索引擎爬虫IP,仅供大家参考: 百度爬虫IP列表      220.181.108.100      180.149.130.*      220.181.51. ...

  6. 爬虫IP代理资源汇总

    通常我们要对某些网站或是app进行数据采集时,都需要解决采集软件爬虫和封IP的问题,采集软件暂且滤过,有多年网站.手机APP爬虫定制开发和数据批量采集服务经验的楚江数据团队,整理汇总爬虫IP代理服务器 ...

  7. 爬虫ip代理对高匿代理ip的必要性

    对于爬虫来说,在听到ip代理的时候,听得最多的莫过于透明代理.匿名代理.高匿代理这几个词了,那么分别是什么意思呢?互相之间有什么样的区别呢? 为什么说爬虫ip代理一定要使用高匿代理呢? 带着这些问题, ...

  8. Python3爬虫教程之ADSL拨号爬虫ip池的使用

    在我之前做爬虫经常需要维护自己的爬虫ip池,他可以挑选出很多有用的爬虫地址,因为不是专业的而且这些爬虫ip通常是公共爬虫ip,所以可用率不是太高,而且这样类型的地址很大情况下都是多人共用的,被封地址概 ...

  9. python语言如何使用隧道爬虫ip

    做过大数据抓取的技术员应该都知道,正常市面上的爬虫ip只分为两种,一种是API提取式的,还有一种是账密形式隧道模式的.那边在做数据抓取的业务时候用python语言如果使用隧道爬虫ip?需要学习爬虫的小 ...

最新文章

  1. 错误处理:RuntimeError: [enforce fail at ..\caffe2\serialize\inline_container.cc:145] . PytorchStreamRead
  2. SpringBoot2使用WebFlux函数式编程
  3. Tomcat的安装及配置。
  4. java zip4j 内存文件和磁盘文件 压缩和加密
  5. 算法:回溯三 Combination Sum组合总数
  6. Linux开发环境搭建与使用——Linux简史
  7. matlab特定等值线,从Matlab轮廓函数中选择等值线
  8. lamp phpstudy mysql_Phpstudy 搭建服务器教程
  9. endnote找不到国标_实验差距惊人!揭秘雅迪高于新国标的品质标准测试
  10. 量子物理与计算机,量子计算机与量子物理
  11. Coolpad/酷派炫影5890 root教程_方法
  12. 【Angular】Angular使用HTTP的GET/POST下载流文件
  13. SCI、EI、IEEE、检索网站的区别
  14. 问题 C: 百头百脚
  15. 信号的宽带和计算机网络的宽带有什么不同,路由器和调制解调器(宽带猫)有什么区别?...
  16. 中国剩余定理 (51nod 1079)
  17. Android 如何关闭Navigation Bar
  18. 顶级域名后缀有哪些?这份科普请好好收藏!
  19. C/C++数字后面的L是什么意思?
  20. linux 打包zip

热门文章

  1. 第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
  2. 【ICML 2020对比学习论文解读】SimCLR: A Simple Framework for Contrastive Learning of Visual Representations
  3. SQL 根据经纬度(GPS)计算距离 查询距离之间的数据
  4. Ubuntu 更换国内源
  5. 四川计算机二级成绩查询2020年9月,【2020年9月四川计算机二级考试成绩查询入口】- 环球网校...
  6. Android FileProvider的使用
  7. c语言程序关键字是什么,C语言中32个关键字详解
  8. python权限管理设置_python权限管理框架
  9. 分部声明一定不能指定不同的基类
  10. 杭州发布取证APP 基于区块链技术应用于社交、直播电商等移动端