吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3637|回复: 15
收起左侧

[学习记录] 【4.2】爬取 Python123 网站上的python二级考试选择题【和编程题】题库

[复制链接]
MyModHeaven 发表于 2022-3-25 21:22
本帖最后由 MyModHeaven 于 2022-4-2 10:27 编辑


考计算机二级,我准备的 python 科目,在学校图书馆我找到了这本书:《高教版 Python 语言程序设计冲刺试卷(含线上题库)》(第 3 版),ISBN:978-7-04-053636-2。虽然这本书是2020年出版的,但python考试大纲变化不大,我又想白嫖,,,。激活码还没被用过,我给用了,得到了线上题库。其实线上题库就是书中的内容,只是在 python123 的网站上可以做而已。

今天我把里面的选择题题库爬下来了,来分享一下。选择题包括公共基础知识和python单选题,公共基础知识又包括计算机系统、数据结构与算法、程序设计基础、软件工程基础和数据库设计基础,python单选题库包括python语法基础、基本数据类型、程序的控制结构、函数和代码复用、组合数据类型、文件和数据格式化、python基础生态和python计算生态。

因为没账号在 python123 上看不到题库,所以我把程序源码和爬下来的题都发一下

from selenium import webdriver
from selenium.webdriver.common.by import By
import xlsxwriter

browser = webdriver.Chrome()
browser.maximize_window()
browser.get('https://python123.io/index/login')

'''
# 扫码登陆
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser.find_element(By.XPATH, '//button[@class="button is-primary is-outlined is-fullwidth"]/i').click()
WebDriverWait(browser, 30).until(EC.text_to_be_present_in_element((By.CLASS_NAME, 'is-text-small'), '我的主页'))
'''

# cookie 登录
browser.delete_all_cookies()
browser.add_cookie({})
browser.get('https://python123.io/student/series/12/')
browser.implicitly_wait(5)

catalogs = browser.find_elements(By.XPATH, '//div[@class="catalog"]')[1:]
d = {}
for catalog in catalogs:
    catalog_head = catalog.find_element(By.CLASS_NAME, 'heading').text
    node_a = catalog.find_elements(By.XPATH, './div/a')
    items = []
    for a in node_a:
        name = a.find_element(By.XPATH, './/div[@class="media-content"]/b').text
        url = a.get_attribute('href')
        items.append((name, url))
    d[catalog_head] = items

def c_pool(part):
# 爬取选择题题库
    wb = xlsxwriter.Workbook('d:/{}.xlsx'.format(part))
    global d
    for item in d[part]:
        ws = wb.add_worksheet(item[0])
        d = {'A1': '序号', 'B1': '题干', 'C1': '选项A', 'D1': '选项B', 'E1': '选项C', 'F1': '选项D', 'G1': '答案'}
        for l in d:
            ws.write(l, d[l])
        n = 2
        browser.get(item[1]+'/choices')
        browser.find_element(By.XPATH, '//div[@class="column is-3"]/div/div/div/div[4]').click()
        node_div = browser.find_elements(By.XPATH, '//div[@class="column is-9"]/div/div/div')
        for div in node_div:
            index = div.find_element(By.CLASS_NAME, 'problem-index').text
            body = div.find_element(By.CLASS_NAME, 'mce-content-body').text
            options = div.find_elements(By.XPATH, './/div[@class="options is-clickable"]/div/div')
            options = [i.text for i in options]
            answer = div.find_element(By.XPATH, './div[2]/div[2]/span[4]').text
            content = [index, body, *options, answer]
            for i in range(7):
                ws.write('ABCDEFG'[i]+str(n), content[i])
            n += 1
    wb.close()

c_pool('公共基础知识题库')

c_pool('PYTHON 单选题库')

https://wwp.lanzouy.com/b01jb6omj[/color]
密码:fnok

虽然就这一点东西,但也花了一天的时间,从昨天晚上到今天下午。中间碰到两个实在解决不了的问题,也通过吾爱得到了答案,事后来看,真的不是什么问题。

  • 用了两个第三方库:selenium 和 xlsxwriter,selenium 用来爬取网页的内容,xlsxwriter 用来把内容写入到excel文件里

  • 一开始写的是扫码登陆,但是在调试过程中发现太麻烦,每次都要登录,所以尝试用cookie登录。这是第一次用,不知道怎么弄,光知道是个字典。就 F12 找cookie,虽然找到了,但是没用对,登录不上。后来就扫码登陆,然后得到cookie,再用cookie登录。将cookie写入本地txt文件后,发现有三个。百度之后,知道了cookie必须有的是 name 和 value, 即:cookie = {'name': '', 'value': ''},其他的可以没有。虽然不知道三个cookie有什么不同,但是一个一个试,试到第二个就成功登陆了

  • selenium 的显式等待也是前天刚弄会的,发现以前一直报错只是因为少了一对括号而已,大意了

  • 最大的收获是学了一个语法糖,翻笔记发现我以前记过,只是忘了,看来笔记还是要常看

【python】如何优雅的把这3个字符串和一个列表放在一个列表里?

  • 网站上还有编程题和几套试卷,但是那些比选择题麻烦,不知道有没有时间爬

  • 今天是第一次用 xlsxwriter ,都是临时百度学的,没弄excel单元格的格式,所以文件里列宽很小,看的时候自己调吧

qNg3DI.jpg

qNga8g.jpg

qNgBKs.jpg







4.2 更新

这次我把简单编程题爬下来了,由于编程题的题干比选择题复杂,我用 selenium 登录上后,直接截图保存。绝大部分的题目都完全在截图内,个别的截不全也不影响做题。后面的简单应用题和复杂应用题就不能截图了(因为截不全,并且影响做题)

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

browser = webdriver.Chrome()
browser.maximize_window()
browser.get('https://python123.io/index/login')

# cookie 登录
browser.delete_all_cookies()
browser.add_cookie({})
browser.get('https://python123.io/student/series/12/modules/167/programmings')
browser.implicitly_wait(5)

i = 0
while i < 60:
    titles = browser.find_elements(By.XPATH, '//div[@class="card-content programming-card"]')
    node_b = titles[i].find_elements(By.XPATH, './/div[@class="media-content"]/b')
    name = ''.join([name.text for name in node_b])
    titles[i].click()
    browser.implicitly_wait(1)
    try:
        browser.find_elements(By.XPATH, '//div[@class="card-content condense vertical-align has-border-bottom"]/div/a')[3].click()
    except IndexError:
        browser.find_elements(By.XPATH, '//div[@class="card-content condense vertical-align has-border-bottom"]/div/a')[2].click()
    time.sleep(1)
    browser.execute_script('window.scrollTo(0,120)')
    browser.save_screenshot('D:\基本编程题\{}.png'.format(name))
    browser.back()
    i += 1

qIPJ61.jpg

https://wwp.lanzouy.com/iZqBT02gm1yb

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
huiker231 + 1 + 1 用python解决python问题,楼主厉害,也谢谢分享

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

beyond1994 发表于 2022-3-25 21:34
为了爬虫,正在学基础的我一点也看不懂你的代码
 楼主| MyModHeaven 发表于 2022-3-25 21:44
beyond1994 发表于 2022-3-25 21:34
为了爬虫,正在学基础的我一点也看不懂你的代码

其实没想象中的那么难,因为我的体会是:学python,先学基础知识,但是学完基础什么也干不了,学完基础后学习使用各种库,才能做点有实际意义的事情;但是没学过的库,光看代码确实看不懂,只要学了,看两眼就知道是在干什么

都说python是胶水语言,在我看来,基础知识是python的胶水,将各个库衔接起来,实现某个目的。
sasaso 发表于 2022-3-25 22:03
我一般用csv写。excel还得安装第三方库。不过我们新手学习爬虫,多练习挺好的。
zhqfangv587 发表于 2022-3-25 22:07
MyModHeaven 发表于 2022-3-25 21:44
其实没想象中的那么难,因为我的体会是:学python,先学基础知识,但是学完基础什么也干不了,学完基础后 ...

确实,感觉python最好的是'.'的使用,顺藤摸瓜慢慢就懂了
beyond1994 发表于 2022-3-25 22:08
MyModHeaven 发表于 2022-3-25 21:44
其实没想象中的那么难,因为我的体会是:学python,先学基础知识,但是学完基础什么也干不了,学完基础后 ...

啊?你的意思是基础要看,第二部是学各种库嘛?  你爬虫是学完基础再去找爬虫课程的嘛,还是说单独去找某个库的使用方法?。
hacker922 发表于 2022-3-25 22:20
哈哈哈 这个是好东西啊 不用买新版本的书了
ysw135 发表于 2022-3-25 23:26
感谢分享,正在找这种资源呢
zhangting2022 发表于 2022-3-26 05:30
厉害厉害&#128077;&#127995;&#128077;&#127995;
JoostChow 发表于 2022-3-26 07:51
人才啊!&#129305;&#129305;&#129305;
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表