利用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高效编程技巧
Jan 07 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
python实现整数的二进制循环移位
Mar 08 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
Python enumerate内置库用法解析
Feb 24 Python
pytorch中的weight-initilzation用法
Jun 24 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
如何将json数据转换为python数据
Sep 04 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
python反扒机制的5种解决方法
Feb 06 Python
Django框架中模型的用法
Jun 10 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
咖啡的植物学知识
2021/03/03 咖啡文化
php利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
理解Javascript闭包
2013/11/01 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python Celery定时任务的示例
2018/03/13 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python对象与引用的介绍
2019/01/24 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
python中selenium库的基本使用详解
2020/07/31 Python
python获取整个网页源码的方法
2020/08/03 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
安全承诺书范文
2014/03/26 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题