我们可以使用
.attrs
属性。因此,我们可以创建一个包含所有标记属性(类和ID除外)的字典,并将其传递给一个数据帧。
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = 'http://nestetraceabilitydashboard.com/nestes-pfad-traceability-dashboard'
page = requests.get(url).text
soup = BeautifulSoup(page, "html.parser")
divList = soup.findAll('div', attrs={"class" : "map-item"})
data = {}
for div in divList:
for k,v in div.attrs.items():
if k not in ('class', 'id'):
k = k.split('-')[1]
data[k] = data.get(k, []) + [v]
df = pd.DataFrame(data)
print(df.head(3))
数据帧:
companyname country district latitude \
0 Apical Group INDONESIA Jakarta Utara -6.099396000
1 Apical Group INDONESIA Lubuk Gaung 1.754005000
2 Kutai Refinery Nusantara INDONESIA Balikpapan -1.179099000
longitude millname province \
0 106.951478000 AAJ Marunda Jakarta
1 101.363532000 Sari Dumai Sejati Riau
2 116.788274000 Kutai Refinery Nusantara Penajam Paser Utara
report
0 http://naturalhealthytreat.com/sites/neste-dae...
1 http://naturalhealthytreat.com/sites/neste-dae...
2 http://naturalhealthytreat.com/sites/neste-dae...
关于
requests
最好用一下
.text
而不是
.content
,因为它保存解码的响应内容(文本)。所以总是使用
文本
,除非响应A是二进制文件(图像、PDF等)。
关于
BeautifulSoup
findAll
用于向后兼容
bs3
在
bs4
它被重命名为
find_all
. 此外,还可以使用属性作为
keyword arguments
,例如:
find_all('div', class_="map-item")
这里我用过
class_
因为
class
是一个python关键字,但是对于其他属性(id、href等),您可以使用它们的名称。