gpt4 book ai didi

python - soup.select css 第 n 个类型?

转载 作者:行者123 更新时间:2023-11-30 23:19:02 27 4
gpt4 key购买 nike

我正在尝试使用 BeautifulSoup 选择以下 html 的第二列

<div class="parent">
<div class="column">
<div class="inventory">1</div>
<div class="inventory">2</div>
<div class="inventory">3</div>
</div>
<div class="column">
<div class="inventory">4</div>
<div class="inventory">5</div>
<div class="inventory">6</div>
</div>
<div class="column">
<div class="inventory">7</div>
<div class="inventory">8</div>
<div class="inventory">9</div>
</div>
</div>

我使用 css 习惯用法 div.column + div 来选择第二列。但是,下面的代码会迭代第二列和第三列中的行。我相信逻辑 div.column + div 没有按照我的预期进行。

soup = BeautifulSoup(htmlSource)
secondColumn = soup.select('div.column + div div.inventory')
for row in column:
#prints stuff about the row

有什么方法可以只迭代第二列的行吗?

最佳答案

对于给定的 CSS,结果集是完全正确的;第三个 div 后面有一个带有 column 类的 div too(毕竟第二个 div 具有该类)。

您必须找到所有 div,然后从结果集中选出第二个:

soup.select("div > div.column")[1]

这只会为您提供一列,即使文档中其他地方有更多这样的组。

如果您需要每个父项的第二列,请添加一个循环:

for parent in soup.select('div.parent'):
column = parent.select('div.column')[1]

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <div class="parent">
... <div class="column">
... <div class="inventory">1</div>
... <div class="inventory">2</div>
... <div class="inventory">3</div>
... </div>
... <div class="column">
... <div class="inventory">4</div>
... <div class="inventory">5</div>
... <div class="inventory">6</div>
... </div>
... <div class="column">
... <div class="inventory">7</div>
... <div class="inventory">8</div>
... <div class="inventory">9</div>
... </div>
... </div>
... ''')
>>> soup.select("div.parent > div.column")[1]
<div class="column">
<div class="inventory">4</div>
<div class="inventory">5</div>
<div class="inventory">6</div>
</div>
>>> for parent in soup.select('div.parent'):
... column = parent.select('div.column')[1]
... print column
...
<div class="column">
<div class="inventory">4</div>
<div class="inventory">5</div>
<div class="inventory">6</div>
</div>

关于python - soup.select css 第 n 个类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com