利用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 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
Python实现的tab文件操作类分享
Nov 20 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
Python如何获取系统iops示例代码
Sep 06 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
python超时重新请求解决方案
Oct 21 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
python绘图pyecharts+pandas的使用详解
Dec 13 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发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
php实现zip文件解压操作
2015/11/03 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
python生成式的send()方法(详解)
2017/05/08 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
学生信息管理系统python版
2018/10/17 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
大学生活动总结模板
2014/07/02 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
node快速搭建后台的实现步骤
2022/02/18 NodeJs