鑑於以下BeautifulSoup尋找下一個特定標籤的標籤發現
<tr class="row-class">
<td>Age</td>
<td>16</td>
</tr>
<tr class="row-class">
<td>Height</td>
<td>5.6</td>
</tr>
<tr class="row-class">
<td>Weight</td>
<td>103.4</td>
</tr>
我試圖使用bs4
和lxml
的相應行返回16
以下(從更大的文件簡化)。這個問題似乎是有兩個td
標籤之間的Navigable String
,使
page.find_all("tr", {"class":"row-class"})
產生具有
result[0] = {Tag} <tr class="row-class"> <td>Age</td> <td>16</td> </tr>
result[1] = {Tag} <tr class="row-class"> <td>Height</td> <td>5.6</td> </tr>
result[2] = {Tag} <tr class="row-class"> <td>Weight</td> <td>103.4</td> </tr>
,這是偉大的結果集,但我不能得到字符串第二個td
。這些行的每個的內容是與所述td
是一個tag
和' '
是一個Navigable String
類似於
[' ', <td>Age</td>, ' ', <td>16</td>, ' ']
。這種差異阻止我使用next_element
或next_sibling
方便的方法,用類似訪問正確的文本:
如果我使用:
find("td", text=re.compile(r'Age')).get_text()
我得到Age
。但是,如果我嘗試通過
find("td", text=re.compile(r'Age')).next_element()
訪問下一個元素,我得到
「NavigableString」對象不是可調用
由於中result
包裝NavigableStrings
,與向後移動previous_element
也有同樣的問題。
如何從找到的Tag
移動到下一個Tag
,跳過next_element
?有沒有辦法從result
中刪除這些' '
?
我應該指出的是,我已經嘗試過以務實的東西,如:
for r in (sp.find_all("tr", {"class":"row-class"})):
age = r.find("td", text=re.compile(r"\d\d")).get_text()
它的工作...直到我解析與Age
前一個匹配\d\d
另一種秩序的文檔。
我知道,另外,我可以
find("td", text=re.compile(r'Age')).next_sibling.next_sibling
但這是硬烘的結構。
所以我需要具體的搜索,發現有目標td
字符串,然後在下一個td
找到該值。我知道我可以建立一些測試每一行的邏輯,但似乎我錯過了一些明顯而優雅的東西......
感謝。我知道我可以做到這一點(以前做過很多次)。如果你看看我的帖子中的'for'循環,你會基本看到你所要求的。這就是我寫'我知道我可以建立一些測試每一行的邏輯'的意思,但是在這裏我正在尋找一種支持的方法,或者在bs4中的便利方法中讓我跳到下一個'標籤'兄弟姐妹或其他優雅的東西! –