当前位置: 首页 > news >正文

用爬虫实现---模拟填志愿

 先来说实现逻辑,首先我要获取到这个网站上所有的信息,那么我们就可以开始对元素进行检查

 我们发现他的每一个学校信息都有一个对应的属性,并且是相同的,那么我们就可以遍历这个网页中的所有属性一样的开始爬取

在来分析,我们会发现,是不是我们不只是要获取到一页的数据,我们要获取这个网站上所有的大学数据对吧,那么我们就要获取到这个按钮然后通过模拟用户操作webdriver,来模拟用户点击执行,然后在对这个数据来进行保存,当然这个数据是保存到数据库中的

import timefrom selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()url = "https://www.gaokao.cn/lineschool"
driver.get(url)try:# 等待直到元素加载完成element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "ant-btn-primary")))# 点击按钮element.click()
except TimeoutException:pass# 提取学校信息
school_infos = driver.find_elements(By.CLASS_NAME, "line-school_schoolInfo__1sdvn")
# 初始化列表用于存储提取的信息
school_data = []# 循环执行点击操作
for i in range(3):print("第" + str(i))# # 将页面滚动到最底部# driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 点击下一页next_page_element = driver.find_element(By.CLASS_NAME, "ant-pagination-next")next_page_element.click()try:driver.find_element(By.CLASS_NAME, "login-popup_wordIcon__ljiP9").click()password_login_element = driver.find_element(By.XPATH, "//div[@class='login-popup_passwordItem__OouFG']")password_login_element.click()time.sleep(2)name = driver.find_element(By.CSS_SELECTOR, ".login-popup_inputItem__29c36 .undefined ")name.send_keys("15573491551")password_input_element = driver.find_element(By.XPATH, "//input[@type='password']")password = "Tjt987666"password_input_element.send_keys(password)# 找到复选框并点击选中checkbox_element = driver.find_element(By.XPATH, "//input[@type='checkbox']")checkbox_element.click()# 获取到点击按钮driver.find_element(By.CLASS_NAME, "login-popup_loginBtn__3buCc ").click()except TimeoutException:print("没有继续下一步")school_infos = driver.find_elements(By.CLASS_NAME, "line-school_schoolInfo__1sdvn")# 遍历每个学校信息for school_info in school_infos:print("数据执行")# 提取学校名称和所在城市信息name_element = school_info.find_element(By.CSS_SELECTOR, ".line-school_schoolName__1Zk8b em")city_element = school_info.find_element_by_class_name("line-school_cityName__VnOjC")school_name = name_element.textcity_name = city_element.text# 提取标签信息tags_elements = school_info.find_elements_by_class_name("line-school_tagName__1Hr9k")tags_text = [tag.text for tag in tags_elements]# 获取最后一个 span 标签的文本值last_span_text = school_info.find_element(By.XPATH,".//div[@class='line-school_tags__3Cdah']//span[last()]").text# 提取数字部分score_value = last_span_text.split(":")[-1]# 存储学校信息为元组school_tuple = (school_name, city_name, tags_text, score_value)# 将元组添加到列表中school_data.append(school_tuple)for school_tuple in school_data:print(school_tuple)
http://www.lryc.cn/news/366945.html

相关文章:

  • vscode Run Code输出出现中文乱码情况问题解决方案
  • 代码随想录训练营Day30
  • Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)
  • STM32F103C8T6基于HAL库移植uC/OS-III
  • 微服务学习Day9-分布式事务Seata
  • vue用vite配置代理解决跨域问题(target、rewrite和changeOrigin的使用场景)
  • 为什么PPT录制没有声音 电脑ppt录屏没有声音怎么办
  • JDBC学习笔记(三)高级篇
  • c++编译器在什么情况下会提供类的默认构造函数等,与析构函数
  • SpringBoot3整合Mybatis-Plus3.5.5出现的问题
  • 服务器数据恢复—强制上线raid5阵列离线硬盘导致raid不可用的数据恢复案例
  • 初入阿里云,上手走一波
  • [C++] 小游戏 斗破苍穹 2.2.1至2.11.5所有版本(中) zty出品
  • Javaweb---HTTPS
  • [已解决]ESP32-C3上传程序成功但没有反应的问题
  • 使用 OCLint进行静态代码分析:一个完整的配置示例
  • 【Linux】线程的互斥
  • electron如何让你窗口总是显示在最前面【mac解决全屏窗口alwaysOnTop参数不起作用】
  • XR和Steam VR项目合并问题
  • uni-app:利用Vue的原型对象Vue.prototype设置全局方法及其引用
  • django接入djangorestframework-simplejwt步骤
  • 前端工程化工具系列(十)—— Browserslist:浏览器兼容性配置工具
  • 双列集合底层源码
  • 【Ardiuno】实验使用ESP32连接Wifi(图文)
  • 优化家庭网络,路由器无线中继配置全攻略(中兴E1600无线中继设置/如何解决没有预埋有线网络接口的问题/使用闲置路由实现WIFI扩展)
  • 【ArcGIS微课1000例】0114:基于DEM地形数据整体抬升或下降高程
  • AGP4+ 打包运行闪退,AGP7+ 正常(has code but is marked native or abstract)
  • ChatGPT3.5和ChatGPT4.0、ChatGPT4o对比
  • 【知识拓展】HTTP、WebSocket 和 RPC:区别与使用场景详解
  • C语言printf( ) 函数和 scanf( ) 函数格式符的修饰符 “*”有什么作⽤?