首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用漂亮汤Python打印带有文本的类名

用漂亮汤Python打印带有文本的类名
EN

Stack Overflow用户
提问于 2021-04-05 07:14:21
回答 3查看 68关注 0票数 0

我想打印带有所有选项的类名。对于错误的答案,它只是radio-button-click-target,但是有了正确的选项,它的单选按钮-点击-目标更正问题

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
addresses = ['https://www.ilmkidunya.com/online-test/5th-class-science-english-meduim-mcqs-with-answers?startfrom=0&last=92']
subjects = ['05th-Science-EM-']
for runscript in range(0, len(addresses)):
    response = requests.get(addresses[runscript])
    soup = BeautifulSoup(response.text, 'lxml')
    ques_id = soup.find_all('div', class_='q-title')
    ques_det = soup.find_all('div', class_='q-desc')
    optn_det = soup.find_all('div', class_='choose-answer-block')
    for i in range(0, len(ques_id)):
        unformated_ques_id = (ques_id[i].text)
        formated_ques_id = unformated_ques_id.replace("Question #  ", subjects[runscript])
        print(formated_ques_id)
        #print('\n')
        print(str(ques_det[i].text).strip())
        #print('\n')
        options = optn_det[i].find_all('label', class_='radio-button-click-target')
        for opn in options:
            print(str(opn.text).strip())
            #print('\n')
        print('<----->')

电流结果

05-科学-EM-1

登革热雌性蚊子产卵:

在墙上

在土壤中

在木头上

在水中

<->

05-科学-EM-2

蛇就是这样的一个例子:

脊椎动物

虫类

虫类

蜗牛

<->

预期结果

05-科学-EM-1

登革热雌性蚊子产卵:

单选按钮-点击-目标:墙上

单选按钮点击目标:在土壤中

单选按钮-点击-目标:在木头上

单选按钮-点击-目标修正问题:在水中

<->

05-科学-EM-2

蛇就是这样的一个例子:

单选按钮-点击-目标校正问题:脊椎动物

单选按钮-点击-目标:蠕虫

单选按钮-点击-目标:昆虫

单选按钮-点击-目标:蜗牛

<->

EN

回答 3

Stack Overflow用户

发布于 2021-04-05 07:33:53

按以下方式更改选择器,并删除对已经字符串的str调用。此外,在适当的情况下,使用' class‘提取类,我使用join组合多值类:

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

addresses = ['https://www.ilmkidunya.com/online-test/5th-class-science-english-meduim-mcqs-with-answers?startfrom=0&last=92']
subjects = ['05th-Science-EM-']

with requests.Session() as s:
    for runscript in range(0, len(addresses)):
        response = s.get(addresses[runscript])
        soup = BeautifulSoup(response.text, 'lxml')
        ques_id = soup.find_all('div', class_='q-title')
        ques_det = soup.find_all('div', class_='q-desc')
        optn_det = soup.find_all('div', class_='choose-answer-block')

        for i in range(0, len(ques_id)):
            unformated_ques_id = (ques_id[i].text)
            formated_ques_id = unformated_ques_id.replace("Question #  ", subjects[runscript])
            print(formated_ques_id)
            print(ques_det[i].text.strip())
            options = optn_det[i].select('label.radio-button-click-target')

            for opn in options:
                print(' '.join(opn['class']), opn.text.strip())
            print('<----->')
票数 2
EN

Stack Overflow用户

发布于 2021-04-05 08:07:41

你应该再试一试。

代码语言:javascript
复制
for opn in options:
            print(' '.join(opn['class']), end=' : ')
            print(str(opn.text).strip())

这将得到你想要的结果。

票数 1
EN

Stack Overflow用户

发布于 2021-04-05 07:48:25

实际上,您的代码包含多个错误:

  1. 您不需要多次调用soup对象!因为你可以拿起你的goal,然后解析它。
  2. ,如果你可以使用一个函数,你不需要使用两个函数。实际上,像.text.strip()这样的东西可以通过.text.strip()一次处理很多错误,但只需转到我的代码中,您就可以完全了解

了。

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests


def main(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    goal = soup.select_one('#divQuestion1')

    title = goal.select_one('.q-desc').get_text(strip=True)
    can = goal.select_one(
        'label[class$=correctquestions]').get_text(strip=True)
    wan = [x.get_text(strip=True)
           for x in goal.select('label[class$=click-target]')]
    print("Question: {}\nCorrect-Answer: {}\nWrong-Answers: {}".format(title, can, wan))


main('https://www.ilmkidunya.com/online-test/5th-class-science-english-meduim-mcqs-with-answers?startfrom=0&last=92')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66949463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档