2014-07-13 70 views
6

我:選擇第二個孩子美麗的湯湯選擇?

<h2 id='names'>Names</h2> 
<p>John</p> 
<p>Peter</p> 

現在什麼在這裏得到了彼得,如果我有H2標籤已經是最簡單的方法是什麼?現在,我已經試過:

soup.select("#names > p:nth-child(1)") 

但在這裏我得到的第n個孩子NotImplementedError:

NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type. 

所以我不知道是怎麼回事。第二種選擇是隻獲得所有'p'標籤的孩子,並努力選擇[1],但是有索引超出範圍的危險,這將需要圍繞每個嘗試獲得彼得與嘗試/除了這是一個有點愚蠢。

任何方式選擇nth-child與soup.select()函數?

編輯: 與第n-的類型似乎這樣的伎倆更換第n個孩子,所以正確的路線是:

soup.select("#names > p:nth-of-type(1)") 

不知道爲什麼它不接受第n個孩子,但似乎n型和n型都返回相同的結果。

回答

5

「第n個的孩子」根本就不是在beautifulsoup4(在寫作時)來實現,根本就在beautifulsoup代碼庫中的代碼沒有做到這一點。作者明確添加了'NotImplementedError'來解釋這一點,here is the code

鑑於你在你的問題中引用的html,你不是在尋找一個h2#名字的孩子。

你真正尋找的是第二個相鄰的兄弟,我不是一個CSS選擇器大師,但我發現這個工作。

soup.select("#names + p + p") 
+4

它沒有作品確實是,但是我做到了與而不是第n個孩子,這似乎也是訣竅。 – Granitosaurus

4

添加您的編輯作爲一個答案,這樣可以更容易被別人發現:中nth-child

使用nth-of-type代替:

soup.select("#names > p:nth-of-type(1)")