我正在嘗試抓取具有以下代碼的頁面:
<li>
<span class="name">Person One</span>
<span class="organization">Mall</span>
<span class="employee">-Yes<span class="contractor yes">Yes</span></span>
</li>
<li>
<span class="name">Person Two</span>
<span class="organization">Market</span>
<span class="employee">-Yes<span class="contractor yes">Yes</span></span>
</li>
<li>
<span class="name">Person Three</span>
<span class="organization">Mall</span>
<span class="employee">-Yes<span class="contractor no">No</span></span>
</li>
我已經找到了這些標簽所在的類bs4。我的目標是獲取這些跨度類中的每一個,然后將其排序為 dict 以將其轉換為資料框。
我真的被困在這一點上!你能幫忙的話,我會很高興
uj5u.com熱心網友回復:
從跨度類中提取鍵并從其文本中提取值dict comprehension:
{x.get('class')[0]: x.text for x in li.select('span')}
原因x.get('class')將產生一個串列,我們必須選擇它的第一個元素才能list comprehension作業。
<span>嵌套s引起的員工價值觀調整:
df['employee'] = df.apply(lambda x: ''.join(x['employee'].strip('-').split(x['contractor'], 1)), axis=1)
例子
from bs4 import BeautifulSoup
import pandas as pd
html='''
<li>
<span >Person One</span>
<span >Mall</span>
<span >-Yes<span >Yes</span></span>
</li>
<li>
<span >Person Two</span>
<span >Market</span>
<span >-Yes<span >Yes</span></span>
</li>
<li>
<span >Person Three</span>
<span >Mall</span>
<span >-Yes<span >No</span></span>
</li>
'''
soup = BeautifulSoup(html)
data = []
for li in soup.select('li'):
data.append({x.get('class')[0]: x.text for x in li.select('span')})
df = pd.DataFrame(data)
df['employee'] = df.apply(lambda x: ''.join(x['employee'].strip('-').split(x['contractor'], 1)), axis=1)
df
輸出
| 名稱 | 組織 | 員工 | 承包商 |
|---|---|---|---|
| 人一 | 購物中心 | 是的 | 是的 |
| 第二個人 | 市場 | 是的 | 是的 |
| 第三人 | 購物中心 | 是的 | 不 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424259.html
