Python爬虫使用实例-jsyks

目标地址:

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
在这里插入图片描述

from selenium import webdriver # 导入时间模块 import time # 导入元素定位功能 from selenium.webdriver.common.by import By # driver.find_element_by_css_selector() 4 一定会报错 弃用 3 # 导入数据请求模块 import requests # 数据解析模块 import parsel # 实例化一个浏览器对象 driver = webdriver.Chrome() # 打开浏览器的窗口 driver.get('https://www.jsyks.com/kmy-mnks') # 强制等待 time.sleep(2) # 最大化浏览器的窗口 driver.maximize_window() # 隐式等待 智能 driver.implicitly_wait(10) # elements 返回的是一个列表对象 lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li') # print(len(lis)) # print(lis) for li in lis: time.sleep(0.2) # 优先考虑使用随机数 rid = li.get_attribute('c') # print(rid) url = f'https://tiba.jsyks.com/Post/{rid}.htm' # 获取到响应体对象的文本数据 response = requests.get(url=url).text # 转对象 selector = parsel.Selector(response) answer = selector.css('#question u::text').get() # print(answer) # 重新赋值 if answer == '对': answer = '正确' elif answer == '错': answer = '错误' # else: 不确定的情况 # print(answer) bs = li.find_elements(By.CSS_SELECTOR, 'B') for b in bs: # 获取选项的内容 choose = b.text # print('题目的选项是', choose) # print('正确答案是', answer) # 可能错题 # if answer in choose: # # 正确答案的点击操作 # b.click() if len(choose) > 2: choose = choose[0] if answer == choose: b.click() # 提交试卷 driver.find_element(By.CSS_SELECTOR, '.btnJJ').click() # 添加阻塞 input() # 关闭浏览器 driver.quit()
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镜花照无眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值