利用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中闭包概念与用法深入理解  动图在线制作网站有哪些,滑动动图图集怎么做?