爲什麼s.span只返回第一個span標籤?
s.span
是一個快捷方式到s.find('span')
這將找到的span
標籤的首次出現只。
此外s.contents返回一個長度爲4的列表。兩個span標籤都在列表中,但第0和第2個索引是「\ n $新行字符。新的一行字符是無用的。這是完成的原因嗎?
根據定義,.contents
輸出所有元素的兒童,包括文本節點列表 - 的NavigableString
class實例。
如果你只想要的標籤,你可以使用find_all()
:
soup.find_all()
而且,如果只span
標籤:
soup.find_all('span')
例子:
>>> from bs4 import BeautifulSoup
>>> s = """<div class="views-row views-row-1 views-row-odd views-row- first">
... <span class="views-field views-field-title">
... <span class="field-content"><a href="/party-pictures/2015/love-heals">Love Heals</a>
... </span>
... </span>
... <span class="views-field views-field-created">
... <span class="field-content">Friday, March 20, 2015
... </span>
... </span>
... </div>"""
>>> soup = BeautifulSoup(s)
>>> for span in soup.find_all('span'):
... print span.text.strip()
...
Love Heals
Love Heals
Friday, March 20, 2015
Friday, March 20, 2015
的原因重複的是嵌套span
元素。你可以用不同的方法修復它。例如,可以使div
內搜索僅recursive=False
:
>>> for span in soup.find('div', class_='views-row-1').find_all('span', recursive=False):
... print span.text.strip()
...
Love Heals
Friday, March 20, 2015
或者,您也可以使用CSS Selectors
:
>>> for span in soup.select('div.views-row-1 > span'):
... print span.text.strip()
...
Love Heals
Friday, March 20, 2015
soup.find_all(「跨度」)仍然不適合工作我。我原以爲它會返回一個長度爲2的列表,但是我只能得到長度爲1的列表,它的類型是bs4.element.ResultSet – Ben 2015-03-25 02:44:17
@Ben我已經做了更新,希望它有助於理解。 – alecxe 2015-03-25 02:51:45
謝謝。這並不像我希望的那樣乾淨。在我看來,有兩個span標籤是div標籤的直接子標籤。我正在以我寫html的方式將它看作一個樹結構。我想通過調用.content()或.children()來獲得這兩個子樹是一種簡單的方法,謝謝你的幫助 – Ben 2015-03-25 03:12:09