利用python爬取软考试题之ip自动
发布时间 - 2026-01-11 00:24:04 点击率:次前言

最近有个软件专业等级考试,以下简称软考,为了更好的复习备考,我打算抓取www.rkpass.cn网上的软考试题。
首先讲述一下我爬取软考试题的故(keng)事(shi)。现在我已经能自动抓取某一个模块的所有题目了,如下图:
目前可以将信息系统监理师的30条试题记录全部抓取下来,结果如下图所示:
抓取下来的内容图片:
虽然可以将部分信息抓取下来,但是代码的质量并不高,以抓取信息系统监理师为例,因为目标明确,各项参数清晰,为了追求能在短时间内抓取到试卷信息,所以并没有做异常处理,昨天晚上填了很久的坑。
回到主题,今天写这篇博客,是因为又遇到新坑了。从文中标题我们可以猜出个大概,肯定是请求次数过多,所以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)
运行结果截图:
这样,在爬虫请求的时候,把请求ip设置为自动ip,就能有效的躲过反爬虫机制中简单的封锁固定ip这个手段。
-------------------------------------------------------------------------------------------------------------------------------------
为了网站的稳定,爬虫的速度大家还是控制下,毕竟站长也都不容易。本文测试只抓取了17页ip。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python ip 爬虫
# python 使用ip爬虫
# 软考
# 信息系统
# 如下图
# 都是
# 是在
# 是因为
# 随机数
# 国内
# 有个
# 过了
# 就能
# 多个
# 将会
# 两种
# 不多
# 很久
# 能在
# 我们可以
# 时间内
# 不容易
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
大型企业网站制作流程,做网站需要注册公司吗?
百度浏览器如何管理插件 百度浏览器插件管理方法
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
香港网站服务器数量如何影响SEO优化效果?
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel如何实现一对一模型关联?(Eloquent示例)
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Android Socket接口实现即时通讯实例代码
网站制作壁纸教程视频,电脑壁纸网站?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
如何在宝塔面板中修改默认建站目录?
Swift开发中switch语句值绑定模式
奇安信“盘古石”团队突破 iOS 26.1 提权
实例解析angularjs的filter过滤器
原生JS获取元素集合的子元素宽度实例
网站制作软件免费下载安装,有哪些免费下载的软件网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何在云虚拟主机上快速搭建个人网站?
如何为不同团队 ID 动态生成多个非值班状态按钮
详解vue.js组件化开发实践
网站制作企业,网站的banner和导航栏是指什么?
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
使用spring连接及操作mongodb3.0实例
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
EditPlus中的正则表达式 实战(2)
如何登录建站主机?访问步骤全解析
如何快速启动建站代理加盟业务?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel如何实现本地化和多语言支持?(i18n教程)
魔方云NAT建站如何实现端口转发?
如何基于云服务器快速搭建网站及云盘系统?
如何确保西部建站助手FTP传输的安全性?
七夕网站制作视频,七夕大促活动怎么报名?
Android GridView 滑动条设置一直显示状态(推荐)
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何续费美橙建站之星域名及服务?
Python高阶函数应用_函数作为参数说明【指导】
PHP正则匹配日期和时间(时间戳转换)的实例代码
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
高性能网站服务器部署指南:稳定运行与安全配置优化方案
javascript中闭包概念与用法深入理解
动图在线制作网站有哪些,滑动动图图集怎么做?

