用于抓取数据源和创建可读增量的python库
delta-scraper的Python项目详细描述
三角刮刀
在早期开发中
用于抓取数据源和创建可读增量的python库。
有关背景,请参见Scraping hurricane Irma。
概念
这个库允许您定义scrapers,这些对象知道如何从源(通常是一个web api,但scrapers可以编写为对html或其他格式进行操作)检索信息,并将数据持久化为json。
当scraper获取新信息时,它能够将该数据与旧数据进行比较,并使用差异来创建一个人类可读的消息。
这些功能可以与git存储库相结合,创建一个提交日志,其中包含随机器可读diff againts生成的json而来的人类可读的提交消息。
请参阅disaster-scrapers和disaster-data以获取此模式的一些实际示例。
基本用法
您可以通过子类化DeltaScraper
来定义新的scraper。下面是一个擦掉联邦应急管理局庇护所名单的例子。
class FemaShelters(DeltaScraper):
url = "https://gis.fema.gov/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=FEMA:FEMANSSOpenShelters&maxFeatures=250&outputFormat=json"
owner = "simonw"
repo = "disaster-data"
filepath = "fema/shelters.json"
record_key = "SHELTER_ID"
noun = "shelter"
def fetch_data(self):
data = requests.get(self.url, timeout=10).json()
return [feature["properties"] for feature in data["features"]]
def display_record(self, record):
display = []
display.append(
" {SHELTER_NAME} in {CITY}, {STATE} ({SHELTER_STATUS})".format(**record)
)
display.append(
" https://www.google.com/maps/search/{LATITUDE},{LONGITUDE}".format(
**record
)
)
display.append(" population = {TOTAL_POPULATION}".format(**record))
display.append("")
return "\n".join(display)