我使用維基百科API獲取信息框數據。我想從這個信息框數據解析website url
。我嘗試使用mwparserfromhell解析網站網址,但不同的關鍵字有不同的格式。從維基百科解析網站信息框數據
這裏有幾個模式的網站 -
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
@Tgr添加了我正在使用的代碼。它只涵蓋少數情況。 –