[英]BeautifulSoup nth-of-type returns empty list. Soup.select()[n -1] returns the elements. Why?
[英]soup.select css nth of type?
我正在尝试用美丽的汤选择以下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 idiom div.column + div
来选择第二列。 但是,下面将迭代第2列和第3列中的行。 我相信逻辑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
遵循与一个div column
类太 (第二div有该类,毕竟)。
你必须找到所有的 column
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>
BeautifulSoup
直接支持css类:
for parent in soup.find_all('div', 'parent'):
second_column = parent('div', 'column')[1]
# handle the second column
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.