数目字生存

XPath爬取LEED项目得分表

2019-07-18  本文已影响0人  askka

题图来自日本摄影师RK镜头下的重庆 重庆某绿色建筑示范楼 自2006年开始美国绿色建筑协会要求参评项目全部转为电子注册网上提交,并会在USGBC网站上公布每个参评LEED项目的详细信息。以重庆某绿色建筑示范楼为例,由下图可见,该项目的专属页面提供了包括项目名称、地址、所在城市、认证项目及认证等级、获得认证的时间等在内的项目概况,以及项目的评分明细,并可下载到该项目的pdf格式Scorecard得分明细表。为便于后续进一步分析,考虑利用XPath解析出网页中的表格。
LEED项目页面及PDF得分表

该项目参评了针对既有建筑节能的LEED O+M: Existing Buildings v3 认证,得分66分,于2018年7月获Gold(金级)认证。
LEED OM: EB从项目选址、能效、材料、室内环境等8个方面对参评项目加以评分,总分110分,各评价指标评分子项得分之和若超过40分便可取得相应等级的LEED认证。评价指标具体设置如下表所示。

评分项 设置得分
Sustainable Sites(可持续性场地) 26
Water Efficiency(节水增效) 14
Energy & Atmosphere(能源与大气) 23
Material & Resources(材料与资源) 10
Indoor Environmental Quality(室内环境品质) 15
Innovation(创新与设计) 6
Regional Priority Credits(因地制宜) 4
Integrative Process Credits. (项目合作) 2
40-49 50-59 60-79 80+
Cerfified(认证级) Silver(银级) Gold(金级) Platinum(白金级)

为爬取得分明细表的内容,对该项目页面加以分析可见,得分明细表位于类名为"sh-content plainlist"的ul项目下。每行表单包括评分子项名称、相应的描述、具体分值三列。找出各列所对应的XPath路径后剩下的工作就比较简单了。


页面分析

代码如下:

import pandas as pd
import requests
from lxml import etree

url = "https://www.usgbc.org/projects/green-demonstration-building"
res = requests.get(url, timeout=10)
html = etree.HTML(res.text)

table_list = html.xpath('//ul[@class="sh-content plainlist"]')

items = table_list[0].xpath('//strong/a[1]/text()')
items = [x.replace('\n','').strip() for x in items ] #替换文本中的\n字符

descript =table_list[0].xpath('//li/text()[2]')
descript = [str for str in descript if not str == '\n'] #删去空字符

scores = table_list[0].xpath('//span[@class="num"]/text()')
scores = [x.replace('\n','') for x in scores ]

scoreboard = pd.DataFrame({'item': items ,
                           'descript': descript ,
                           'scores': scores })

运行代码得到的结果。

XPath解析出的得分表
从结果来看,XPath已将得分明细表完整无误的解析。通过split()命令还可方便的提取出第三列中'/'前的实际得分,‘/’后的是每个评价指标评分子项的满分分值。对于后续的数据分析而言,关心的是本项目在每个评价指标上的实际得分,亦即上图中分子位置上的数值。
有一点小小的遗憾是,项目页面上的评分子项的得分格式并未完全统一。如“因地制宜”等评分子项中(上图右侧58-60),网页中没有该评分子项的设置分数,而是只给出了本项目的得分。 这一点也不是XPath的能力不足,而是网页根本没有给出。
如果实在是想要保留评分规则中对于每个评价指标的设置分值的话,可以查阅相应的LEED 2009 for Existing Buildings: Operations & Maintenance 评分规则。该分值设置也可该项目的Scorecard.pdf文件获得,或许下步可考虑python解析Scorecard.pdf文件来获取得分表。
上一篇 下一篇

猜你喜欢

热点阅读