在頁面鏈接上,有一個名為“COSEWIC 評估報告”的部分。該部分有加粗文本,標題為類別,然后是非粗體文本,包含有關該類別的資訊。我正在尋找使用 bs4 刮掉非粗體文本。
粗體文本的 HTML 格式以<strong> sample text </strong>這種方式包裝在標簽中,我可以使用result = s.find("strong", text=re.compile("Scientific name")).
也就是說,然后我想為每個給定的標題抓取該標題下的資訊。如果我檢查該部分的 HTML,它看起來像這樣。
<p>
<strong> Scientific name </strong>
<br>
"Anarta edwarsii"
</p>
因此,從定位“學名”部分的起點,我如何獲得“Anarta edwarsii”部分。
我想也許 bs4 find_next_sibling() 會起作用或類似的東西,但到目前為止還沒有成功。另外需要注意的是,我不能使用文本來查找元素,因為我必須為許多不同的物種重復這些程序。因此,標題保持不變,但其子文本會發生變化。
謝謝!!
uj5u.com熱心網友回復:
您可以將其next_siblings用作結果集,使用串列理解和join()結果進行迭代:
' '.join([x.text for x in soup.select_one('p:-soup-contains("Scientific name:") strong').next_siblings]).strip()
輸出:
'"Anarta edwarsii"'
替代示例:
選擇<p>包含字串“Scientific Name”的,將其stripped_strings作為串列['Scientific name:', 'Anarta edwardsii']并選擇第二個元素:
import requests
from bs4 import BeautifulSoup
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
'Referer': 'https://www.google.com/'
}
r = requests.get('https://www.canada.ca/en/environment-climate-change/services/species-risk-public-registry/cosewic-assessments-status-reports/edwards-beach-moth-2009.html',headers=headers)
soup = BeautifulSoup(r.text,'lxml')
list(soup.select_one('p:-soup-contains("Scientific name:")').stripped_strings)[-1]
輸出:
'"Anarta edwarsii"'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407895.html
標籤:
上一篇:無法獲取電話號碼和地址
