python - Beautiful Soup - 从 div 类中的外部引号中提取值
问题描述
我在使用以下代码从网站提取的属性中的元素中提取特定值时遇到了一些问题:
from bs4 import BeautifulSoup
import requests
# Get mills and estates information from dashboard
url = 'http://nestetraceabilitydashboard.com/nestes-palm-oil-dashboard'
page = requests.get(url).text
soup = BeautifulSoup(page, "html.parser")
divList = soup.findAll('div', attrs={"class" : "map-item estate-map-item"})
data = {}
for div in divList:
for k,v in div.attrs.items():
if k not in ('class'):
data[k] = data.get(k, []) + [v]
df = pd.DataFrame(data)
摘录divList
如下:
[<div class="map-item estate-map-item" data-country="Indonesia" data-latitude="1.926944000" data-location="Riau" data-longitude="99.906390000" data-mills="Aek Nabara" id="map_item_5600">(Aek Nabara) - Aek Nabara</div>,
<div class="map-item estate-map-item" data-country="Indonesia" data-latitude="0.429444444" data-location="Riau" data-longitude="101.818611100" data-mills="Buatan I " id="map_item_5601">(Buatan I/II ) - Buatan</div>,
但是,输出dict
并dataframe
删除 .map_item_XXXX 之后的所有内容id
。
我将如何仅在 my 中的引号之外获取值dict
,然后将值放入dataframe
id
列(Aek Nabara) - Aek Nabara
中,例如上面的第一项divList
?
解决方案
(Aek Nabara) - Aek Nabar
不是属性(.attrs)
而是textContent
用来.text
获取值
for div in divList:
for k,v in div.attrs.items():
if k != 'class':
if k == 'id':
# insert "(Aek Nabara) - Aek Nabara" instead of "map_item_5600"
data[k] = data.get(k, []) + [div.text.strip()]
else:
data[k] = data.get(k, []) + [v]
df = pd.DataFrame(data)
推荐阅读
- javascript - Javascript Web 应用程序测试
- python - 如何在 TensorFlow 中为矢量化参数设置双射器?
- ios - AVCapture 似乎滞后,文本识别不会立即开始
- json - 从 JSON 数组中获取名称并在 Listview 中显示第一个字符
- clang - Clang AST Interpretation
- node.js - 检查失败:U_SUCCESS(状态)
- javascript - 在 Jquery 中用小时和分钟设置时间,从变量中读取的值
- python - 如何为类中的递归函数实现装饰器
- java - Android Studio - 我的所有课程中的代码都已更改
- c# - Wpf Button 条件绑定到变量