J'utilise wikipedia api pour récupérer des données sur l'infobox. Je veux analyser website url
à partir de ces données d'infobox. J'ai essayé d'utiliser mwparserfromhell pour analyser l'URL du site, mais il existe différents formats pour différents mots clés.Parse Site web de Wikipédia Infobox data
Voici quelques modèles pour le site Web -
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]
je besoin d'aide dans l'analyse syntaxique official website link
pour tous les modèles pris en charge par wikipedia?
Edition -
Code -
# 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
Pouvez-vous montrer votre code? mwparserfromhell devrait être capable de faire face à tout cela (sauf le premier qui n'affiche pas réellement un lien). – Tgr
@Tgr ajouté le code que j'utilise. Il ne couvre que quelques cas. –