利用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 Sleep休眠函数使用简单实例
Feb 02 Python
Python检测QQ在线状态的方法
May 09 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
python利用Guetzli批量压缩图片
Mar 23 Python
python中sys.argv函数精简概括
Jul 08 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Django自关联实现多级联动查询实例
May 19 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
python实现学员管理系统(面向对象版)
Jun 05 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php 魔术方法详解
2014/11/11 PHP
试用php中oci8扩展
2015/06/18 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
对Python中的@classmethod用法详解
2018/04/21 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
租房合同协议书
2014/04/09 职场文书
初三学习计划书范文
2014/04/30 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
公司领导班子对照材料
2014/08/18 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
铁路安全反思材料
2014/12/24 职场文书
教师远程培训心得体会
2016/01/09 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
nginx 配置指令之location使用详解
2022/05/25 Servers