這是我作業的一個完整的HTML。
這是上述HTML的簡化版本:
<table class="premium">
<tr class=" retailer top-offer" data-pricer="47. 84" saler-id="123">...</td>
<tr class=" retailer" data-pricer="57。 11" saler-id="234">...</td>
</table>/span>
<table class="basic-supp">
<tr class=" retailer top-offer"/span> data-pricer="41. 87" saler-id="456">...</td>
<tr class=" retailer" data-pricer="58。 12" saler-id="567">...</td>
</table>
從帶有class="basic-supp"的TABLE中,從TR標簽和data-pricer="..."屬性中我需要提取值。
我在簡化的html上試了一下這個方法:
from bs4 import BeautifulSoup
with open('file.html'/span>, 'r'/span>) as f:
contents = f.read()
soup = BeautifulSoup(contents, 'lxml')
tags = soup.find_all('tr')
for tag in tags。
print(tag.attrs['data-pricer'] )
> 47.84; 47.84?
>57.11
> 41.87; 41.87
> 58.12
這幾乎是我所需要的,除了它從兩個表中取值,而不是從帶有class="basic-supp"的表中取值。有什么辦法可以解決這個問題嗎?
而主要的問題是,它在我上面發布的完整 html 上根本不起作用。這個錯誤:
print(tag.attrs['data-pricer')
KeyError: 'data-pricer'
有人能給我建議嗎?
謝謝你的時間!
P.S. 這與用beautifulsoup提取屬性值
的帖子甚至沒有重復。uj5u.com熱心網友回復:
直接使用css選擇器更容易:
data = [] 。
for tr in soup.select('table.basic-supp tr') 。
data.append([tr['data-pricer'],tr['saler-id'] ] )
print(data)
或者,如果你想使用極端的串列理解,一個單行本:
。[[tr['data-pricer'],tr['saler-id'] ] for tr in soup. select('table.basic-supp tr') ]
在這兩種情況下,輸出結果應該是:
[['41. 87', '456'], ['58.12', '567'] ]
uj5u.com熱心網友回復:
首先找到<tr>然后用tr['data-pricer']得到你想要的東西。
嘗試這樣做:
from BS4 import BeautifulSoup
html = '''
<table class="mium">
<tr class="retailer top-offer" data-pricer="47.84" saler-id="123"> ...</td>
<tr class="retailer" data-pricer="57.11" saler-id="234"> ...< /td>
</table>
<table class="basic-supp"/span>>
<tr class="retailer top-offer" data-pricer="41.87" saler-id="456"> ...</td>
<tr class="retailer" data-pricer="58.12" saler-id="567"> ...< /td>
</table>
'''
soup = BeautifulSoup(html , 'html.parser')
for table in soup.find_all("table", {"class" : "basic-supp"})。)
for tr in table.find_all('tr'):
print(tr['data-pricer'])/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314850.html
標籤:
下一篇:決議器-找到錯誤的FCS
