鱼C论坛

 找回密码
 立即注册
查看: 1448|回复: 5

新手求助!扒题库时每题的ABCD答案项如何在excel里排成一行?

[复制链接]
发表于 2023-9-1 13:50:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我是这样写的:
from bs4 import BeautifulSoup
import pandas as pd

handle = driver.window_handles
driver.switch_to.window(handle[0])
driver.switch_to.frame('mainContent')
driver.switch_to.frame('detailContent')
pageSource = driver.page_source

soup = BeautifulSoup(pageSource, 'html.parser')
soup.prettify()
answer_divs = soup.find_all('div', class_="answer")

list = []
for answer_div in answer_divs:
    timu = answer_div.find_all('div', class_="timu")
    answers = answer_div.find_all('span')  #每个题的所有ABCDE选项都在一起
    truedaan = answer_div.find_all('div', class_="truedaan")
    for i in range(20):
        list.append([timu[i],answers[i],truedaan[i]])

df1 = pd.DataFrame(list)
df2 = pd.read_excel(file_name)
merge_x = pd.concat([df1, df2])
merge_x.to_excel(file_name, index=None)
print('文件合并成功')

打印的结果是这样按行显示的:
<div class="timu">2.人工预警的流程是员工上报、班长反馈、预警启动、()。</div>        <span>B.2022年10月15日-10月21日</span>        <div class="truedaan">正确答案:A</div>
<div class="timu">3.在相对封闭的房间内发生火灾时()。</div>        <span class='C"' value="C">C.2022年10月16日-10月22日</span>        <div class="truedaan">正确答案:A</div>
<div class="timu">5.消费者投诉举报电话是()。</div>        <span class='A"' value="A">A.分析总结</span>        <div class="truedaan">正确答案:B</div>
<div class="timu">6.客服热线办理以下()业务不需要短信验证码。</div>        <span>B.预警处理</span>        <div class="truedaan">正确答案:D</div>

现在有两个问题:
1、如何去除打印结果里的多余字符?
2、每题有2-5个选项,如何让每题的选项按列保存在题目的相同行?

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-1 13:50:57 | 显示全部楼层
问题1:如何去除打印结果里的多余字符?

在打印结果中,我们可以看到每个元素的文本内容被包裹在了HTML标签中,我们需要去除这些标签,只保留文本内容。可以使用BeautifulSoup库中的 get_text() 方法来获取标签内的文本内容。

修改代码如下:
list = []
for answer_div in answer_divs:
    timu = answer_div.find_all('div', class_="timu")
    answers = answer_div.find_all('span')
    truedaan = answer_div.find_all('div', class_="truedaan")
    for i in range(20):
        list.append([timu[ i].get_text(), answers[ i].get_text(), truedaan[ i].get_text()])

问题2:每题有2-5个选项,如何让每题的选项按列保存在题目的相同行?

你可以使用pandas库中的 DataFrame 来处理数据,并使用 transpose() 方法将每个题目的选项转置为列。

修改代码如下:
df1 = pd.DataFrame(list)
df1 = df1.transpose()
df2 = pd.read_excel(file_name)
merge_x = pd.concat([df1, df2])
merge_x.to_excel(file_name, index=None)
print('文件合并成功')

这样,每个题目的选项就会按列保存在题目的相同行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-1 13:53:27 | 显示全部楼层
网页上每个题的信息是这样的:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-1 13:54:04 | 显示全部楼层
</div>
<div class="multiple">
<div class="timu">2.人工预警的流程是员工上报、班长反馈、预警启动、()。</div>
<ul>
<li><!--?xml version="1.0" encoding="UTF-8"?-->
<svg class="inputclass" height="16px" version="1.1" viewbox="0 0 16 16" width="16px" xmlns="http">
<title>对</title>
<g fill="none" fill-rule="evenodd" id="页面-1" stroke="none" stroke-width="1">
<g fill-rule="nonzero" id="答题结果" transform="translate(-52.000000, -394.000000)">
<g id="编组" transform="translate(32.000000, 120.000000)">
<g id="对" transform="translate(20.000000, 274.000000)">
<rect fill="#000000" height="16" id="矩形" opacity="0" width="16" x="0" y="0"></rect>
<path d="M8,0 C3.58173535,0 0,3.58170814 0,8 C0,12.4182919 3.58173535,16 8,16 C12.4183318,16 16,12.4182919 16,8 C16,3.58172497 12.4183654,0 8,0 Z M12.398732,6.08244205 L7.24885688,11.3527445 C7.0119455,11.5952172 6.62760691,11.5952172 6.39072912,11.3527445 L3.60128482,8.49791603 C3.36422228,8.25542653 3.36422228,7.86220123 3.60128482,7.61964444 C3.83817941,7.37707083 4.2225348,7.37707083 4.45941259,7.61964444 L6.8198098,10.0352025 L11.5404363,5.20410318 C11.7774988,4.96154639 12.161871,4.96154639 12.3987488,5.20410318 C12.6358113,5.44664314 12.6358113,5.83988527 12.3987488,6.08244205 L12.398732,6.08244205 Z" fill="#52C41A" id="形状"></path>
</g>
</g>
</g>
</g>
</svg><span class='A"' value="A">A.分析总结</span></li><li><input class="B" disabled="disabled" type="radio" value="B"/><span>B.预警处理</span></li><li><input class="C" disabled="disabled" type="radio" value="C"/><span>C.预警回复</span></li><li><input class="D" disabled="disabled" type="radio" value="D"/><span>D.预警响应</span></li>
</ul>
</div>
<div class="mydaan">我的答案:</div>
<div class="truedaan">正确答案:A</div>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-1 13:58:10 | 显示全部楼层
isdkz 发表于 2023-9-1 13:50
问题1:如何去除打印结果里的多余字符?

在打印结果中,我们可以看到每个元素的文本内容被包裹在了HTML ...

第2个问题没有解决,只是把行、列转置了,我要A选项一列,B选项一列,C一列,D一列这种格式。现在打印出来的结果是A\B\C\D都在一列里轮流展示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-1 19:32:33 | 显示全部楼层
网址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-16 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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