【发布时间】:2018-01-14 20:15:16
【问题描述】:
我正在使用 wikipedia api 来获取信息框数据。我想从这个信息框数据中解析website url。我尝试使用mwparserfromhell解析网站url,但是不同的关键字有不同的格式。
以下是一些网站模式 -
url = <!-- {{URL|www.example.com}} -->
| url = [https://www.TheGuardian.com/ TheGuardian.com]
| url = <span class="plainlinks">[https://www.naver.com/ www.naver.com]</span>
|url = [https://www.tmall.com/ tmall.com]
|url = [http://www.ustream.tv/ ustream.tv]
我需要帮助解析official website link 以了解维基百科支持的所有模式吗?
编辑 -
代码 -
# get infobox data
import requests
# keyword
keyword = 'stackoverflow.com'
# wikipedia api url
api_url = (
'https://en.wikipedia.org/w/api.php?action=query&prop=revisions&'
'rvprop=content&titles=%s&rvsection=0&format=json' % keyword)
# api request
resp = requests.get(api_url).json()
page_one = next(iter(resp['query']['pages'].values()))
revisions = page_one.get('revisions', [])
# infobox daa
infobox_data = next(iter(revisions[0].values()))
# parse website url
import mwparserfromhell
wikicode = mwparserfromhell.parse(infobox_data)
templates = wikicode.filter_templates()
website_url_1 = ''
website_url_2 = ''
for template in templates:
# Pattern - `URL|http://x.com`
if template.name == "URL":
website_url_1 = str(template.get(1).value)
break
if not website_url_1:
# Pattern - `website = http://x.com`
try:
website_url_2 = str(template.get("website").value)
except ValueError:
pass
if not website_url_1:
# Pattern - `homepage = http://x.com`
try:
website_url_2 = str(template.get("homepage").value)
except ValueError:
pass
if website_url_1:
website_url = website_url_1
elif website_url_2:
website_url = website_url_2
【问题讨论】:
-
你能显示你的代码吗? mwparserfromhell 应该能够处理所有这些(除了第一个实际上不会显示链接)。
-
@Tgr 添加了我正在使用的代码。它仅涵盖少数情况。
标签: python parsing wikipedia wikipedia-api