利用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实现二分法算法实例
Feb 02 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
通过实例学习Python Excel操作
Jan 06 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
什么是Python包的循环导入
2020/09/08 Python
python利用线程实现多任务
2020/09/18 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
特色蛋糕店创业计划书
2014/01/28 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
推荐信格式范文
2014/05/09 职场文书
信用卡工作证明模板
2014/09/14 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python