我想在限制搜索到什麼是所謂的英文維基百科的「信息框」必須小心。因此,我首先搜索標題'Basisdaten',要求它是一個th
元素。可能並不完全確定,但可能性更大。發現我在'Basisdaten'下查找tr
元素,直到我找到另一個tr
,包括一個(推測不同的)標題。在這種情況下,我搜索'Postleitzahlen:',但是這種方法可以找到'Basisdaten'和下一個標題之間的任何/所有項目。
PS:我還應該提一下if not current.name
的原因。我注意到一些行由BeautifulSoup視爲字符串的新行組成。這些沒有名稱,因此需要在代碼中專門對待它們。
import requests
import bs4
page = requests.get('https://de.wikipedia.org/wiki/Hamburg').text
soup = bs4.BeautifulSoup(page, 'lxml')
def getInfoBoxBasisDaten(s):
return str(s) == 'Basisdaten' and s.parent.name == 'th'
basisdaten = soup.find_all(string=getInfoBoxBasisDaten)[0]
wanted = 'Postleitzahlen:'
current = basisdaten.parent.parent.nextSibling
while True:
if not current.name:
current = current.nextSibling
continue
if wanted in current.text:
items = current.findAll('td')
print (items[0])
print (items[1])
if '<th ' in str(current): break
current = current.nextSibling
結果是這樣的:兩個單獨的td
元素,請求。
<td><a href="/wiki/Postleitzahl_(Deutschland)" title="Postleitzahl (Deutschland)">Postleitzahlen</a>:</td>
<td>20095–21149,<br/>
22041–22769,<br/>
<a href="/wiki/Neuwerk_(Insel)" title="Neuwerk (Insel)">27499</a></td>
請包括描述兩個感興趣的單元格的HTML片段。 – DyZ
你只想要單元格中的文本,還是更多? –