python-3.x - 从同一类标签中抓取文本
问题描述
这是我尝试从中获取文本的 HTML
<div class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>21</div></div><div
class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>17</div></div><div
class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>14</div></div><div
class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>7</div></div><div
</div></div></div>
我想分别在每个类中的每个第二个 div 中获取每个第一个 div,例如第一个 div:
0
0
0
0
第二个div:
21
17
14
7
解决方案
您可以使用 CSS 选择器:nth-of-type
:
from bs4 import BeautifulSoup
html_doc = """<div class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>21</div></div><div
class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>17</div></div><div
class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>14</div></div><div
class="scoreboardColumn-2OtpR compactHeader-1b8nN"><div>0</div><div>7</div></div><div
</div></div></div>"""
soup = BeautifulSoup(html_doc, "html.parser")
for first_div in soup.select(".scoreboardColumn-2OtpR > div:nth-of-type(1)"):
print(first_div.text)
print()
for second_div in soup.select(".scoreboardColumn-2OtpR > div:nth-of-type(2)"):
print(second_div.text)
印刷:
0
0
0
0
21
17
14
7
或者没有 CSS 选择器:
for s in soup.find_all(class_="scoreboardColumn-2OtpR"):
divs = s.find_all("div")
print("First: {} Second: {}".format(divs[0].text, divs[1].text))
印刷:
First: 0 Second: 21
First: 0 Second: 17
First: 0 Second: 14
First: 0 Second: 7
推荐阅读
- python - 以 numpy 的风格重构矩阵排列
- java - RXJava 订阅不可转换类型;不能将 'void' 转换为 'org.reactivestreams.Subscription?
- html - Bootstrap 3 复选框 - 在复选框和文本之间添加空格
- android - 如何将回调函数从 Activity 中的一个片段传递给第二个 Activity?
- ios - 在过渡到第二个控制器期间动画之前不需要的按钮预览
- php - 使用 Laravel 在特定文件夹中创建目录
- ios - 如何在不重新加载Objective-C中的行的情况下更改行中的特定元素?
- java - 如何使用 AlarmManager 设置一些警报?
- r - 具有不同 y 轴刻度的 ggplot facet_grid:分面面板的反向轴
- javascript - 如何将对象的属性映射到另一个对象?