簡體   English   中英

soup.select css nth of type?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM