利用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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
在Python中处理列表之reverse()方法的使用教程
May 21 Python
bpython 功能强大的Python shell
Feb 16 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
Python实现图片添加文字
Nov 26 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
python单元测试之pytest的使用
Jun 07 Python
django 认证类配置实现
Nov 11 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
PHP在线书签系统分享
2016/01/04 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
在react中使用vuex的示例代码
2018/07/30 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
python日期相关操作实例小结
2019/06/24 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
python多维数组分位数的求取方式
2020/03/03 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
在职人员函授期间自我评价分享
2013/11/08 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
项目合作协议书
2014/09/23 职场文书
2015年维修工作总结
2015/04/25 职场文书
Python如何配置环境变量详解
2021/05/18 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
Python面试不修改数组找出重复的数字
2022/05/20 Python