Python爬虫使用实例-jsyks

news2024/11/23 11:44:18

目标地址:

https://www.jsyks.com/kmy-mnks

例如:

url='https://www.jsyks.com/kmy-mnks' # kmy-mnks 科目一-模拟考试
url='https://www.jsyks.com/kms-mnks' # kms-mnks 科目四-模拟考试

一、获取资源

先从本题分析里面得到解析答案【通过div.Exam ul li里面列表的c值得到href】
在这里插入图片描述

查看本题解析

https://tiba.jsyks.com/Post/c6f5b.htm

在这里插入图片描述


在这里插入图片描述
由此:

http://tiba.jsyks.com/Post/"+$(a).attr("c")+".htm

取得c值即可知道解析答案的url地址。

二、发送请求

url='https://www.jsyks.com/kms-mnks'
driver = webdriver.Firefox()
driver.get(url)

三、数据解析

pip install selenium

更新定位方法:
find_element_by_css_selector() 是 Selenium WebDriver 提供的一种方法,用于通过 css 选择器定位页面元素。在最新的 Selenium 版本中,这个方法已经被弃用,并被新的方法所替代。在 Selenium 4 之后,推荐使用 find_element() 方法配合 By 类。

from selenium.webdriver.common.by import By
element = driver.find_element(By.CSS_SELECTOR, "your_css_selector")

例如:使用 find_element() 方法和 By.CSS_SELECTOR 常量来定位页面上的一个 css 选择器是"button.submit" 的元素,并对其执行点击操作。

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.example.com")
# 找到页面上的一个元素,比如一个按钮
element = driver.find_element(By.CSS_SELECTOR, "button.submit")
# 对找到的元素进行操作,比如点击
element.click()
# 关闭浏览器
driver.quit()

四、实现代码

科目四模拟考:

import requests
import parsel
from selenium import webdriver
from selenium.webdriver.common.by import By

url='https://www.jsyks.com/kms-mnks'
driver = webdriver.Firefox()
# 没啥大问题,运行正常,只是会出现一句 The version of firefox cannot be detected. Trying with latest driver version
driver.get(url)
driver.maximize_window()# 最大化浏览器
#lis = driver.find_element(By.CSS_SELECTOR, '.Content li')
#lis = driver.find_elements_by_css_selector('div.Exam ul.Content li')
#lis = driver.find_elements(By.CSS_SELECTOR, '.Content li').text
lis = driver.find_elements(By.CSS_SELECTOR,  '.Content li')
#answer_url = [f'http://tiba.jsyks.com/Post/{li.get_attribute("c")}.htm' for li in lis]
#print(lis)
#for li in lis:
#    path= f'http://tiba.jsyks.com/Post/{li.get_attribute("c")}.htm'
#    answer_url = answer_url.append(path)
def get_all_answer(answer_url_list):
    answer_list = []
    for answer_url in answer_url_list:
        html_data = requests.get(url=answer_url).text
        #print(html_data)
        selcetor = parsel.Selector(html_data)
        question = selcetor.css('#question h1 strong a::text').get()
        answer = selcetor.css('#question h1 u::text').get()
        if answer=='对':
            answer='正确'
        elif answer=='错':
            answer='错误'
        else:               #elif len(answer)>2: # 多选
            answer=answer
        dict={'问题':question, '答案':answer}
        #print(dict)
        answer_list.append(dict)
    return answer_list
#answer_url_list=[f'http://tiba.jsyks.com/Post/{li.get_attribute("c")}.htm' for li in lis]
answer_url=[f"http://tiba.jsyks.com/Post/{li.get_attribute('c')}.htm" for li in lis]
answer_list =get_all_answer(answer_url)
page=1
for li, answer in zip(lis,answer_list):
    elements = li.find_elements(By.CSS_SELECTOR,  'b') # 查找<b>

    num=1
    for i in elements:
        choose = i.text
        if len(choose)>2:
            choose=choose[:1] #取最前面的那个A B C D
        if choose in answer['答案']:
            driver.find_element(By.CSS_SELECTOR,  f'#LI{page} b:nth-child({num+2})').click()
        num+=1
        #print(choose)
    page+=1

driver.find_element(By.CLASS_NAME,  'btn_JJ').click()
print('----------- finished -----------')

运行结果
科目四考试为满分
科目一考试为99
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面向对象技术——设计模式

目录 层次结构 具体设计模式分类 创建型模式&#xff08;处理创建对象&#xff09; 结构型模式&#xff08;处理类和对象的组合&#xff09; 行为型模式&#xff08;描述类或者对象的交互行为&#xff09; 创建型设计模式 ​编辑 结构型设计模式 行为型设计模式​编辑 …

时序论文17|ICML24 SAMformer:华为新奇视角讨论Transformer时序预测时的收敛优化问题

论文标题&#xff1a;SAMformer: Unlocking the Potential of Transformers in Time Series Forecasting with Sharpness-Aware Minimization and Channel-Wise Attention 论文链接&#xff1a;https://arxiv.org/abs/2402.10198 代码链接&#xff1a;https://github.com/rom…

从零开始:在 VMware ESXi 环境中安装 Rocky Linux 的秘诀

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;。 “ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…&#xff08;每天更新不间断&#xff0c;福利…

appium中的uiautomatorviewer显示的界面为横屏解决方法

uiautomatorviewer显示的界面为横屏解决方法 解决方法&#xff1a; 修改模拟器的分辨率&#xff0c;比如540:900就可解决了

MySQL基础教程(一):连接数据库和使用表

这个专栏用来讲解 MySQL 数据的基本语法和用法。本教程的目的是方便查询 MySQL 的用法&#xff0c;因此对于原理的讲解会偏少一些&#xff0c;但特点就是会有很多实验操作图。 本专栏使用的源材料是《MySQL必知必会》这本书的源代码。 文章目录 1. 连接 MySQL 数据库2. 创建数…

搭建个人博客--1、前端页面

采用bootstrap前端框架&#xff1a; Anchor - a free Bootstrap UI Kit综合使用bootstrap框架做一个Aotm Blog个人博客_基于bootstrap的博客-CSDN博客 做出模板base.html {% load static %} <!DOCTYPE html> <html langen> <head><meta charset"UT…

Facebook账单户和海外户该如何选择?

近期&#xff0c;有不少小伙伴来咨询广告投放账户的问题&#xff0c;很多人把账单户作为广告投放的选择&#xff0c;那么账单户和海外户哪个更适合你呢&#xff1f;本文将详细探讨这两种账户类型的差异&#xff0c;以及在不同情境下应如何选择&#xff0c;感兴趣的朋友就继续看…

遨游双卫星智能终端,赋能石油行业安全生产和信息化建设

石油&#xff0c;被誉为“工业的血液”&#xff0c;其影响力深远&#xff0c;石油勘探与开发活动往往在人迹罕至的偏远区域展开&#xff0c;如广袤的戈壁滩、浩瀚的海洋&#xff0c;这些区域普遍缺乏健全的公共电信网络基础设施。以往&#xff0c;油田野外作业团队主要依赖短波…

避雷!Google Adsense联盟营销七大投放误区

你是否在使用Google AdSense进行广告投放&#xff1f;你是否想进一步优化你的投放策略&#xff1f;那么这篇文章你不可错过啦&#xff01; Google AdSense为跨境商家提供了一个平台&#xff0c;我们可以通过展示相关广告来赚取收入。然而&#xff0c;即使是最有经验的商家也可…

API项目:模拟接口开发和调用

创建模拟接口 controller 层&#xff1a; 控制层&#xff0c;负责处理用户请求&#xff0c;并根据请求调用相应的业务逻辑&#xff0c;然后返回对应的视图或数据。 model 层&#xff1a; 数据模型层&#xff0c;负责数据的处理和业务逻辑&#xff1b;在 model 层中&#xf…

无人机在矿业领域的应用!

矿区测绘与建模 无人机可以快速、全面地获取矿区的地形地貌数据&#xff0c;生成高精度的二维或三维模型。 这些模型可用于矿区的规划、设计、监测和管理&#xff0c;提高矿山的生产效率。 库存量量化监测 无人机能够捕捉厘米级的地形数据&#xff0c;通过计算得出准确的库…

ADC -模数转换

ADC -模数转换 - 将模拟信号转换为数字信号 目录 ADC -模数转换 - 将模拟信号转换为数字信号 STM32方面使用的AD转化方式是逐次逼近法 ADC 什么叫单次&#xff0c;连续&#xff0c;扫描&#xff0c;中断&#xff1f; 应用&#xff1a;运用STM32中ADC转…

Vue入门-小黑课堂Demo

功能需求&#xff1a; ①列表渲染 ②删除功能 ③添加功能 ④底部统计和清空 页面效果&#xff1a; 代码展示&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" c…

年会工作会议会务报名签到小程序开源版开发

年会工作会议会务报名签到小程序开源版开发 会议管理微信小程序&#xff0c;对会议流程、开支、数量、标准、供应商提供一种标准化的管理方法。以达到量化成本节约&#xff0c;风险缓解和服务质量提升的目的。适用于大型论坛、峰会、学术会议、政府大会、合作伙伴大会、经销商…

大多数人不知道的:线程池CallerRunsPolicy()拒绝策略

总所周知&#xff0c;java里面线程池的四个拒绝策略 AbortPolicy 丢弃并抛出RejectedExecutionException异常 DiscardPolicy 直接丢弃 DiscardOldestPolicy 直接丢弃最前面的任务&#xff0c;尝试执行新任务 CallerRunsPolicy 由调用线程池的线程处理任务&a…

linux安装minianconda

文章目录 &#x1f315;我的配置&#x1f315;从清华镜像源里下载minianaconda&#x1f315;安装&#x1f315;自定义安装位置&#x1f315;是否关闭打开终端默认进入anaconda的设置&#xff1f;&#x1f315;配置清华镜像源 &#x1f315;我的配置 ubuntu 22.04LTS &#x1…

全都燃起来了!黄金周车市销量成绩出炉

文/王俣祺 导语&#xff1a;国庆黄金周对于其他行业可能是个放松的好时机&#xff0c;但对于国内汽车市场而言可能是下半年最关键的“战场”。这几天&#xff0c;全国各地的车展和4S店简直热闹非凡&#xff0c;新能源车尤其抢镜&#xff0c;优惠活动不断&#xff0c;引得消费者…

DAMA数据管理知识体系(第9章 文件和内容管理)

课本内容 9.1 引言 概要 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理[1]。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。业务驱动因素 法规遵从性要求 法律法规要求组织保…

基于uniapp+django微信小程序 食品安全信息管理系统

目录 项目介绍具体实现截图开发者工具介绍技术路线性能/安全/负载方面开发语言以及框架介绍python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取 项目介绍 食品安全信息管理系统设计的目的是为用户提供食品信息、科普专栏、食品检测、检测结果、交…

力扣LeetCode-链表中的循环与递归使用

标题做题的时候发现循环与递归的使用差别&#xff1a; 看两道题&#xff1a; 两道题都是不知道链表有多长&#xff0c;所以需要用到循环&#xff0c;用到循环就可以把整个过程分成多个循环体&#xff0c;就是每一次循环要执行的内容。 反转链表&#xff1a; 把null–>1…