在python beautifulsoup中迭代多个div,输出到df,然后输出到csv
试图为我学校的课程目录构建一个scraper/parser。第一步是将Coursicle数据库刮到csv,但我现在只能让它吐出第一行 下面是我试图解析的html片段:在python beautifulsoup中迭代多个div,输出到df,然后输出到csv,python,html,css,python-3.x,beautifulsoup,Python,Html,Css,Python 3.x,Beautifulsoup,试图为我学校的课程目录构建一个scraper/parser。第一步是将Coursicle数据库刮到csv,但我现在只能让它吐出第一行 下面是我试图解析的html片段: <div class="card back" style="display: block;"> <div class="addClass Back"> <i class="fa clicky fa-star Back"></i> <i
<div class="card back" style="display: block;">
<div class="addClass Back">
<i class="fa clicky fa-star Back"></i>
<i class="fa clicky fa-star-o Back"></i>
<i class="clicky icon-info-sign"></i>
</div>
<div class="courseNumberBack">
<span class="subject">ANTH</span> <span class="number">54</span>-<span class="section">001</span>
<div class="smallCourseInfo">
<span class="abbrevTitle">First-Year Seminar: The Indians' New Worlds: Southeastern Histories from 1200 to 1800</span>
</div>
</div>
<hr class="faddedLine">
<div class="courseNameBack"><div class="days">TuTh</div><br>
<div class="smallCourseInfo"> <div class="instructor">Clara Scarry</div></div>
<div class="time">3:30pm-4:45pm</div><br>
<div class="smallCourseInfo"> <div class="building">Alumni 203 </div></div>
<div class="genEds">HS US WB </div>
</div>
我试过这个:
cardback = (soup.find('div', class_='card back'))
result = dict(
zip(
[cardback.text for cardback in soup.select('span.subject')] ,
[cardback.text for cardback in soup.select('span.number')] ,
[cardback.text for cardback in soup.select('span.section')] ,
[cardback.text for cardback in soup.select('span.abbrevTitle')] ,
[cardback.text for carback in soup.select('div.days')] ,
[cardback.text for carback in soup.select('div.instructor')] ,
[cardback.text for carback in soup.select('div.time')] ,
[cardback.text for carback in soup.select('div.building')] ,
[cardback.text for carback in soup.select('div.genEds')]
)
)
print(result)
但这会返回以下错误:
ValueError: dictionary update sequence element #0 has length 9; 2 is required
有人有什么想法吗 在python中使用
print
时,有两个特殊的kw参数:end
和sep
<代码>结束参数正是您所需要的。它看起来像这样
print(something.text, ',', end=' ')
太好了,谢谢!代码已在上面更新。不过,它仍然只打印第一行。你把命名搞砸了一点。对于数字中的数字,您有一个类似于
的循环,并打印数字
,但不是像这样的数字
<代码>cardback=(soup.find('div',class='card back')用于cardback中的courseNumberBack。find_all('div',class='courseNumberBack'):用于courseNumberBack中的主题。find_all('span',class='subject'):用于主题中的主题:打印(subjects.text,,“,”,end=”)返回的代码>返回:“AttributeError:“NavigableString”对象没有属性“text”`我通过将.text更改为.string来消除错误,但它仍然只打印第一个结果。
缺少结束标记,类也由“”分隔,因此回卡
是两个独立的类,所以你应该用卡片背面之类的东西。而像for days in day
这样的内部循环是多余的,只需将它们替换为print(day,…)
。除了上面提到的问题外,我看不到你的代码有任何问题,请详细描述你想做什么,以便我能帮助你
print(something.text, ',', end=' ')