利用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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
Python程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
Python 常用的安装Module方式汇总
May 06 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
Pytorch mask_select 函数的用法详解
Feb 18 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python对一个数向上取整的实例方法
2020/06/18 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Python如何批量生成和调用变量
2020/11/21 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
办公室打字员岗位职责
2014/04/16 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
三八妇女节活动总结
2014/05/04 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
三行辞职书范文
2015/02/26 职场文书
责任书范本大全
2015/05/11 职场文书
商业计划书范文
2019/04/24 职场文书
Go语言测试库testify使用学习
2022/07/23 Golang