利用python爬取软考试题之ip自动代理


Posted in Python onMarch 28, 2017

前言

最近有个软件专业等级考试,以下简称软考,为了更好的复习备考,我打算抓取www.rkpass.cn网上的软考试题。

首先讲述一下我爬取软考试题的故(keng)事(shi)。现在我已经能自动抓取某一个模块的所有题目了,如下图:

利用python爬取软考试题之ip自动代理

目前可以将信息系统监理师的30条试题记录全部抓取下来,结果如下图所示:

利用python爬取软考试题之ip自动代理

抓取下来的内容图片:

利用python爬取软考试题之ip自动代理

虽然可以将部分信息抓取下来,但是代码的质量并不高,以抓取信息系统监理师为例,因为目标明确,各项参数清晰,为了追求能在短时间内抓取到试卷信息,所以并没有做异常处理,昨天晚上填了很久的坑。

回到主题,今天写这篇博客,是因为又遇到新坑了。从文中标题我们可以猜出个大概,肯定是请求次数过多,所以ip被网站的反爬虫机制给封了。

利用python爬取软考试题之ip自动代理

活人不能让尿憋死,革命先辈的事迹告诉我们,作为社会主义的接班人,我们不能屈服于困难,逢山开路,遇水搭桥,为了解决ip问题,ip代理这个思路就出来了。

在网络爬虫抓取信息的过程中,如果抓取频率高过了网站的设置阀值,将会被禁止访问。通常,网站的反爬虫机制都是依据IP来标识爬虫的。

于是在爬虫的开发者通常需要采取两种手段来解决这个问题:

1、放慢抓取速度,减小对于目标网站造成的压力。但是这样会减少单位时间类的抓取量。

2、第二种方法是通过设置代理IP等手段,突破反爬虫机制继续高频率抓取。但是这样需要多个稳定的代理IP。

话不多书,直接上代码:

# IP地址取自国内?匿代理IP网站:http://www.xicidaili.com/nn/
# 仅仅爬取首页IP地址就足够一般使用

from bs4 import BeautifulSoup
import requests
import random

#获取当前页面上的ip
def get_ip_list(url, headers):
 web_data = requests.get(url, headers=headers)
 soup = BeautifulSoup(web_data.text)
 ips = soup.find_all('tr')
 ip_list = []
 for i in range(1, len(ips)):
 ip_info = ips[i]
 tds = ip_info.find_all('td')
 ip_list.append(tds[1].text + ':' + tds[2].text)
 return ip_list

#从抓取到的Ip中随机获取一个ip
def get_random_ip(ip_list):
 proxy_list = []
 for ip in ip_list:
 proxy_list.append('http://' + ip)
 proxy_ip = random.choice(proxy_list)
 proxies = {'http': proxy_ip}
 return proxies

#国内高匿代理IP网主地址
url = 'http://www.xicidaili.com/nn/'
#请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}
#计数器,根据计数器来循环抓取所有页面的ip
num = 0
#创建一个数组,将捕捉到的ip存放到数组
ip_array = []
while num < 1537:
 num += 1
 ip_list = get_ip_list(url+str(num), headers=headers)
 ip_array.append(ip_list)
for ip in ip_array:
 print(ip)
#创建随机数,随机取到一个ip
# proxies = get_random_ip(ip_list)
# print(proxies)

运行结果截图:

利用python爬取软考试题之ip自动代理

这样,在爬虫请求的时候,把请求ip设置为自动ip,就能有效的躲过反爬虫机制中简单的封锁固定ip这个手段。

-------------------------------------------------------------------------------------------------------------------------------------

为了网站的稳定,爬虫的速度大家还是控制下,毕竟站长也都不容易。本文测试只抓取了17页ip。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现的简单发送邮件脚本分享
Nov 07 Python
Python最基本的数据类型以及对元组的介绍
Apr 14 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
Python类的动态修改的实例方法
Mar 24 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
三步实现Django Paginator分页的方法
Jun 11 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
Python内置类型性能分析过程实例
Jan 29 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Python通过format函数格式化显示值
Oct 17 Python
详解python调度框架APScheduler使用
Mar 28 #Python
Python中is与==判断的区别
Mar 28 #Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 #Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 #Python
python递归查询菜单并转换成json实例
Mar 27 #Python
Python中的命令行参数解析工具之docopt详解
Mar 27 #Python
Python使用PDFMiner解析PDF代码实例
Mar 27 #Python
You might like
php实现jQuery扩展函数
2009/10/30 PHP
php实现读取超大文件的方法
2014/07/28 PHP
PHP生成器简单实例
2015/05/13 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
再谈javascript原型继承
2014/11/10 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
TensorFlow实现卷积神经网络
2018/05/24 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
Python容器类型公共方法总结
2020/08/19 Python
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
加工操作管理制度
2014/01/19 职场文书
市场营销管理制度
2014/01/29 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
Python基础详解之邮件处理
2021/04/28 Python
nginx结合openssl实现https的方法
2021/07/25 Servers