我正在使用 pywikibot api 来获取维基百科信息框属性。我想要提取的很少有人口密度、人口、海拔等。对于某些城市,例如(https://en.wikipedia.org/wiki/Beijing),API 返回“auto”作为键值如人口密度平方公里。对于其他几个城市,我得到的是实际密度而不是汽车密度。任何人都知道这背后的原因以及我如何获得实际值?
import pywikibot
def get_page(city: dict) :
"""
Returns parsed wikipedia page
"""
page = pywikibot.Page(en_wiki, re.search(r'wiki/(.*)', city['article']['value']).group(1))
if page.pageid == 0:
raise Exception('page do not exist')
return page
def get_info_box_details(templates: dict):
"""
Get info box details
"""
infobox_template = []
for tmpl, params in templates:
if 'Infobox' in tmpl:
infobox_template.append(params)
population = { k:v for my_dict in infobox_template for k,v in my_dict.items() if 'population' in k}
print(population)
wiki_page = get_page(city)
templates = wiki_page.raw_extracted_templates
info_box = get_info_box_details(templates)
要自动计算相对于总面积的密度,请键入
代替任何密度值。auto
因此,
auto
意味着信息框模板(MediaWiki)将尝试使用面积和人口值来计算该值。至于推理,我想这会减少冗余,这应该会减轻人类编辑者的模板维护负担。
您可以在 Python 程序中执行相同的操作(通过将人口除以面积来计算密度;类似于模板的做法),或者您可能希望直接从页面的 HTML 输出中抓取数据(这将有其自身的挑战) ).