J'ai ce script fait en Python 3:
response = simple_get("https://en.wikipedia.org/wiki/Mathematics")
result = {}
result["url"] = url
if response is not None:
html = BeautifulSoup(response, 'html.parser')
title = html.select("#firstHeading")[0].text
Comme vous pouvez le voir, je peux obtenir le titre de l'article, mais je ne sais pas comment obtenir le texte de "Mathématiques (du grec μά ..." à la table des matières ...
sélectionnez le <p>
tag. Il y a 52 éléments. Je ne sais pas si vous voulez le tout, mais vous pouvez parcourir ces balises pour le stocker comme vous le pouvez. J'ai simplement choisi d'imprimer chacun d'eux pour afficher la sortie.
import bs4
import requests
response = requests.get("https://en.wikipedia.org/wiki/Mathematics")
if response is not None:
html = bs4.BeautifulSoup(response.text, 'html.parser')
title = html.select("#firstHeading")[0].text
paragraphs = html.select("p")
for para in paragraphs:
print (para.text)
# just grab the text up to contents as stated in question
intro = '\n'.join([ para.text for para in paragraphs[0:5]])
print (intro)
Il existe un moyen beaucoup plus simple d'obtenir des informations de wikipedia - API Wikipedia .
Il y a this Python wrapper , qui vous permet de le faire en quelques lignes uniquement avec zéro analyse HTML:
import wikipediaapi
wiki_wiki = wikipediaapi.Wikipedia('en')
page = wiki_wiki.page('Mathematics')
print(page.summary)
Tirages:
Les mathématiques (du grec μάθημα máthēma, "connaissance, étude, apprentissage") comprennent l'étude de sujets tels que la quantité, la structure, l'espace et le changement ... (omis intentionnellement)
Et, en général, essayez d'éviter le grattage d'écran si une API directe est disponible.
Utilisez la bibliothèque wikipedia
import wikipedia
#print(wikipedia.summary("Mathematics"))
#wikipedia.search("Mathematics")
print(wikipedia.page("Mathematics").content)
Vous pouvez obtenir la sortie souhaitée en utilisant la bibliothèque lxml
comme ci-dessous.
import requests
from lxml.html import fromstring
url = "https://en.wikipedia.org/wiki/Mathematics"
res = requests.get(url)
source = fromstring(res.content)
paragraph = '\n'.join([item.text_content() for item in source.xpath('//p[following::h2[2][span="History"]]')])
print(paragraph)
Utilisation de BeautifulSoup
:
from bs4 import BeautifulSoup
import requests
res = requests.get("https://en.wikipedia.org/wiki/Mathematics")
soup = BeautifulSoup(res.text, 'html.parser')
for item in soup.find_all("p"):
if item.text.startswith("The history"):break
print(item.text)
Ce que vous semblez vouloir, c'est le contenu de la page (HTML) sans les éléments de navigation environnants. Comme je l'ai décrit dans cette réponse antérieure de 201 , il y a (au moins) deux façons de l'obtenir:
La manière la plus simple dans votre cas consiste probablement à inclure le paramètre action=render
dans l'URL, comme dans https://en.wikipedia.org/wiki/Mathematics?action=render . Cela vous donnera juste le contenu HTML et rien d'autre.
Alternativement, vous pouvez également obtenir le contenu de la page via MediaWiki API , comme dans https://en.wikipedia.org/w/api.php?format=xml&action=parse&page=Mathematics .
L'avantage de l'utilisation de l'API est qu'elle peut également vous donner beaucoup ( d'autres informations sur la page que vous pouvez trouver utile. Par exemple, si vous souhaitez avoir une liste des liens interlangues normalement affichés dans la barre latérale de la page, ou les catégories normalement affichées sous la zone de contenu, vous pouvez obtenir ceux de l'API comme ceci:
(Pour obtenir également le contenu de la page avec la même demande, utilisez prop=langlinks|categories|text
.)
Il existe plusieurs bibliothèques Python pour l'utilisation de l'API MediaWiki qui peuvent automatiser certains détails de son utilisation, bien que l'ensemble de fonctionnalités qu'elles prennent en charge puisse varier. Cela dit, il est également parfaitement possible d'utiliser l'API directement à partir de votre code sans bibliothèque entre les deux.
Pour obtenir une manière appropriée d'utiliser la fonction, vous pouvez simplement obtenir l'API JSON offerte par Wikipedia:
from urllib.request import urlopen
from urllib.parse import urlencode
from json import loads
def getJSON(page):
params = urlencode({
'format': 'json',
'action': 'parse',
'prop': 'text',
'redirects' : 'true',
'page': page})
API = "https://en.wikipedia.org/w/api.php"
response = urlopen(API + "?" + params)
return response.read().decode('utf-8')
def getRawPage(page):
parsed = loads(getJSON(page))
try:
title = parsed['parse']['title']
content = parsed['parse']['text']['*']
return title, content
except KeyError:
# The page doesn't exist
return None, None
title, content = getRawPage("Mathematics")
Vous pouvez ensuite l'analyser avec n'importe quelle bibliothèque dont vous voulez extraire ce dont vous avez besoin :)