使用BeautifulSoup一個特定的div的孩子,我試過如下:找到所有的「H2」標記,與屬性「ID」和值「列左」
q = soup.div.find_all("div", { "id" : "column-left" }, "h2")
但是這給了我的文字的<p>
以及。我只是想要一個特定div的孩子的h2。
使用BeautifulSoup一個特定的div的孩子,我試過如下:找到所有的「H2」標記,與屬性「ID」和值「列左」
q = soup.div.find_all("div", { "id" : "column-left" }, "h2")
但是這給了我的文字的<p>
以及。我只是想要一個特定div的孩子的h2。
如果您使用最新BeautifulSoup的版本(和你應該)你可以使用一個CSS選擇器,這可能更容易編寫和維護。例如:
>>> from bs4 import beautifulsoup
>>> soup = BeautifulSoup('<div id=column-left><h2>Header</h2><p>Paragraph</p><h2>Another header</h2><p>Another paragraph</p></div>')
>>> soup.select('div#column-left > h2')
[<h2>Header</h2>, <h2>Another header</h2>]
你爲什麼訪問soup.div
?
試試這個:
q = soup.find('div', { 'id' : 'column-left' }).find_all('h2')
而且find_all具有可選參數「ID」,這樣你就不必寫屬性映射
q = soup.find('div', id='column-left').find_all('h2')
我得到一個錯誤:AttributeError:'ResultSet'對象沒有'find_all'屬性我找到了一個解決方案,但它的相當長,所以也許有更好的辦法:'q = soup.div.find_all(「div 」,{ 「id爲」: 「列左」}:在p H2 「) 對於i p = k.find_all(在q) 對於k」: 打印(i.text)' – BitByBit
@BitByBit我編輯一個例子,現在請嘗試。另請參閱此[問題](http://stackoverflow.com/q/24108507/5091346)關於返回類型。 –
是的,這工作得很好。 Jaaps3的答案也適用,我選擇他的答案而不是你的答案,因爲使用css選擇器是更短的代碼,更容易。然而,我非常感謝你:-) – BitByBit
什麼是「h2」應該做的?第三個參數是*遞歸*,所以你不會尋找任何h2的 –
@Padraic Cunningham我想找到h2。但不只是任何h2s ....只有h2是屬性'id'和值'column-left'的div的孩子 – BitByBit
你想要的是使用find然後調用find_all('h2',recursive = False) '什麼發現返回 –