我試圖通過簡化的HTML頁面解析如下:如何在Python中提取使用Beautifulsoup從HTML標籤
<div class="anotherclass part"
<a href="http://example.com" >
<div class="column abc"><strike>£3.99</strike><br>£3.59</div>
<div class="column def"></div>
<div class="column ghi">1 Feb 2013</div>
<div class="column jkl">
<h4>A title</h4>
<p>
<img class="image" src="http://example.com/image.jpg">A, List, Of, Terms, To, Extract - 1 Feb 2013</p>
</div>
</a>
</div>
我在編碼蟒蛇一個初學者,我已閱讀和重新閱讀在http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
的beautifulsoup文檔我有這樣的代碼:
from BeautifulSoup import BeautifulSoup
with open("file.html") as fp:
html = fp.read()
soup = BeautifulSoup(html)
parts = soup.findAll('a', attrs={"class":re.compile('part'), re.IGNORECASE})
for part in parts:
mypart={}
# ghi
mypart['ghi'] = part.find(attrs={"class": re.compile('ghi')}).string
# def
mypart['def'] = part.find(attrs={"class": re.compile('def')}).string
# h4
mypart['title'] = part.find('h4').string
# jkl
mypart['other'] = part.find('p').string
# abc
pattern = re.compile(r'\&\#163\;(\d{1,}\.?\d{2}?)')
theprices = re.findall(pattern, str(part))
if len(theprices) == 2:
mypart['price'] = theprices[1]
mypart['rrp'] = theprices[0]
elif len(theprices) == 1:
mypart['price'] = theprices[0]
mypart['rrp'] = theprices[0]
else:
mypart['price'] = None
mypart['rrp'] = None
我想提取的類def
和0的任何文本我認爲我的腳本可以正確執行。
我也想提取abc
這兩個價格,我的腳本目前以相當笨拙的方式進行操作。有時候有兩種價格,有時候是一種,有時甚至沒有。
最後,我想提取jkl
的"A, List, Of, Terms, To, Extract"
部分,這是我的腳本無法做到的。我認爲獲得p
標籤的字符串部分將工作,但我不明白爲什麼它不。此部分中的日期始終與ghi
類中的日期相匹配,因此應該很容易更換/刪除它。
有什麼建議嗎?謝謝!
這是一個美麗的解決方案unutbu :-)非常感謝您的時間和精力。我有很多東西需要消化,我從你的回答中學到了很多東西。非常感謝。 – user1464409
...只需添加:真正令人印象深刻的努力 - 讓我指出一個隱藏在代碼中的小錯誤:您在'parse_price(text)'內使用'item.string'而不是'text' –
@TheodrosZelleke :非常感謝,趕上! – unutbu