利用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 相关文章推荐
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
Python对象与引用的介绍
Jan 24 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
python用tkinter实现一个gui的翻译工具
Oct 26 Python
如何用python 操作zookeeper
Dec 28 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 Python
python playwrigh框架入门安装使用
Jul 23 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使用cookie保存用户登录的用户名实例
2015/01/26 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
vue-cli 首屏加载优化问题
2018/11/06 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
八大排序算法的Python实现
2021/01/28 Python
常见python正则用法的简单实例
2016/06/21 Python
python处理xml文件的方法小结
2017/05/02 Python
详解django中自定义标签和过滤器
2017/07/03 Python
python中 logging的使用详解
2017/10/25 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
一个入门级python爬虫教程详解
2021/01/27 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
前台文员岗位职责及工作流程
2013/11/19 职场文书
教育孩子心得体会
2014/01/01 职场文书
咖啡店创业计划书
2014/08/15 职场文书
西安大雁塔导游词
2015/02/10 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
导游词之崇武古城
2019/10/07 职场文书