ZeBinYao 2020-03-27 18:07 采纳率: 0%
浏览 162

编程题踩完切到函数题获取html之后为什么不进入第二个for循环直接结束运行了 求救

python代码

from pony.orm import *
db = Database()
class Tm(db.Entity):
    id = PrimaryKey(int, auto=True)
    bh = Optional(str)
    bt = Optional(str)
    fs = Optional(int)
    tgs = Optional(int)
    tjs = Optional(int)
    tgl = Optional(str)
    tmnl = Optional(str)
    html = Optional(str)
    tx = Optional(str)
    xqylj = Optional(str)
# db.generate_mapping()

db.bind(provider='sqlite', filename='e:/python/Tm.sqlite')
db.generate_mapping(create_tables=True)
set_sql_debug(True)

import time
from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://pintia.cn/problem-sets/1111652100718116864/problems/type/7'
driver.get(url)
time.sleep(1)

html = driver.page_source
import re
reobj = re.compile(r'<tr><td class="answerIcon_1du7d"></td><td>([\d\D]*?)</td><td><a href="([\d\D]*?)" class="">([\d\D]*?)</a></td><td>([\d\D]*?)</td><td>([\d\D]*?)</td><td>([\d\D]*?)</td><td>([\d\D]*?)</td></tr>')
for i in range(2):#i用来判断是函数题页面还是编程题页面
    for match in reobj.finditer(html):
        bhs = match.group(1)#获取题目标号
        if "函数" in bhs:#如果标号中有函数这两个字就是函数题,否则就是编程题
            txs = "函数题"
        else:
            txs = "编程题"
        bts = match.group(3)#获取题目标题
        fss = match.group(4)#获取题目分数
        tgss = match.group(5)#获取题目通过数
        tjss = match.group(6)#获取题目提交数
        tgls = match.group(7)#获取题目通过率
        url2 = "http://pintia.cn" + match.group(2)#题目链接
        driver2 = webdriver.Chrome()
        driver2.get(url2)#打开题目链接
        time.sleep(3)
        f = False#f判断是否有无题目
        htmls = driver2.page_source
        reobj2 = re.compile(r'<div class="problem_Yd8rq p-3 mb-3 background-grey-1"><div class="ques-view"><p>([\d\D]*?)</p>')
        for match2 in reobj2.finditer(htmls):#获取详细题目内容
            tmnls = match2.group(1)
            f = True
        if f == False:#f用来判断是否有详细题目内容,若没有则为无
            tmnls = "无"
        s = Tm(bh = bhs,bt = bts,fs = fss,tgs = tgss,tjs = tjss,tgl = tgls,tmnl = tmnls,html = htmls,tx = txs,xqylj = url2)
        time.sleep(3)
        db.commit()
        driver2.quit()#关闭题目详情页链接的浏览器
    if i == 0:
        driver.find_element_by_xpath("//div[@id='sparkling-daydream']/div[3]/div[3]/div/ul/li/a/div/div[2]").click()#点击函数题,变为函数题页面
        html = driver.page_source#获取函数题的网页源代码
f.close()
  • 写回答

1条回答

  • lshen01 2023-03-17 01:43
    关注

    参考GPT和自己的思路:

    根据你提供的代码,问题可能出现在第二个for循环内部。有可能在打开题目详情页链接的浏览器后,等待3秒后获取到的详细题目内容(tmnls)为空,因此f的值为False,跳出了该循环,进入下一个循环,但由于只有两个循环,因此直接结束了运行。建议你在获取tmnls后,再次检查其值是否为空,如果为空,则继续等待或者抛出异常,以避免程序提前结束运行。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable