我試圖用 Beautifulsoup 抓取這個頁面。
https://www.nb.co.za/en/view-book/?id=9780798182539
如果特定元素沒有唯一的類或 ID,我該如何定位它們?是否可以div根據兄弟中的值/文本抓取 a div?
例如,在下面的代碼中,9780798182539如果兄弟div是<p>ISBN:</p>
<div class="row clearfix">
<div class="col-md-3 noPadding">
<p>ISBN:</p>
</div>
<div class="col-md-9 noPadding">
9780798182539
</div>
</div>
這是完整的html:
<div class="col-lg-7 col-md-12 col-sm-12 author-details">
<h2>Step by Step: Counting to 50 </h2>
<h5>
<a href="/en/authors?authorId=2163">Cuberdon</a>
</h5>
<div class="row clearfix">
<div class="col-md-3 noPadding">
<p>ISBN:</p>
</div>
<div class="col-md-9 noPadding">
9780798182539
</div>
</div>
<div class="row clearfix">
<div class="col-md-3 noPadding">
<p>Publisher:</p>
</div>
<div class="col-md-9 noPadding">
Human & Rousseau
</div>
</div>
<div class="row clearfix">
<div class="col-md-3 noPadding">
<p>Date Released:</p>
</div>
<div class="col-md-9 noPadding">
November 2021
</div>
</div>
<div class="row clearfix">
<div class="col-md-3 noPadding">
<p>Price (incl. VAT):</p>
</div>
<div class="col-md-9 noPadding">
R 120.00
</div>
</div>
<div class="row clearfix">
<div class="col-md-3 noPadding">
<p>Format:</p>
</div>
<div class="col-md-9 noPadding">
<p>Hard cover, 32pp</p>
</div>
</div>
</div>
uj5u.com熱心網友回復:
您可以使用它的文本:-soup-contains來定位p標簽。環繞:has偽類選擇器,并將關系指定為帶有子>組合器的直接父子,以獲得直接父div。然后放入一個相鄰的兄弟組合器 ,帶有div型別選擇器,移動到相鄰的,div:
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('http://www.nb.co.za/nb/view-book?id=9780798182539')
soup = bs(r.content, 'lxml')
print(soup.select_one('div:has(> p:-soup-contains("ISBN:")) div' ).text.strip())
uj5u.com熱心網友回復:
到目前為止,這是有效的解決方案。
from bs4 import BeautifulSoup
html = '''
<div >
<h2>Step by Step: Counting to 50 </h2>
<h5>
<a href="/en/authors?authorId=2163">Cuberdon</a>
</h5>
<div >
<div >
<p>ISBN:</p>
</div>
<div >
9780798182539
</div>
</div>
<div >
<div >
<p>Publisher:</p>
</div>
<div >
Human & Rousseau
</div>
</div>
<div >
<div >
<p>Date Released:</p>
</div>
<div >
November 2021
</div>
</div>
<div >
<div >
<p>Price (incl. VAT):</p>
</div>
<div >
R 120.00
</div>
</div>
<div >
<div >
<p>Format:</p>
</div>
<div >
<p>Hard cover, 32pp</p>
</div>
</div>
</div>
'''
soup = BeautifulSoup(html, "html.parser")
div_text =soup.find('div',class_="col-md-9 noPadding")
print(div_text.get_text(strip=True))
輸出:
9780798182539
uj5u.com熱心網友回復:
您可以find_all使用 class 在主 div 上執行 a row clearfix,然后對包含字串的 div 進行過濾,然后在該 div上為具有 class 的 divISBN執行 a 。它希望在串列理解中是這樣的:findcol-md-9 noPadding
[i.find('div', class_='col-md-9 noPadding').get_text().strip() for i in soup.find_all('div', class_='row clearfix') if 'ISBN:' in i.get_text()][0]
輸出:
9780798182539
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369475.html
上一篇:有沒有辦法通過從任務管理器中查找和管理內容來控制程式?
下一篇:檢查美麗湯中的特定課程
