2017-09-20 6 views
-1

J'essaye de gratter tous les liens aux batailles de la "Liste des batailles navales" sur Wikipedia en utilisant python. Le problème est que je n'arrive pas à comprendre comment exporter tous les liens contenant les mots "/ wiki/Battle" dans mon fichier CSV. Je suis habitué au C++, donc python est un peu étranger à moi. Des idées? Voici ce que j'ai jusqu'à présent ...Comment gratter les liens de Wikipedia avec Python

from bs4 import BeautifulSoup 
import urllib2 

rootUrl = "https://en.wikipedia.org/wiki/List_of_naval_battles" 


def get_soup(url,header): 
    return 
BeautifulSoup(
    urllib2.urlopen(urllib2.Request(url,headers=header)),'html.parser') 

# soup settings  
url = rootUrl + item 
header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"} 

soup = get_soup(url,header) 

battle = soup.findAll("/wiki/Battle") 
+2

qu'est-ce que cela vous donne? qu'attendais-tu? De votre question, il semble que vous ayez les liens et que vous demandiez comment l'écrire en CSV, mais je ne peux pas le dire avec certitude. – Stael

+0

Recherchez des exemples de la méthode findAll. Vous pouvez récupérer tous les liens en recherchant des éléments sur la page. Une fois que vous avez tous ceux-là, vous pouvez les parcourir et regarder le href dans les attrs et chercher ceux qui ressemblent à "/ wiki/Battle". – Kyle

+0

Quels autres champs voulez-vous capturer dans votre fichier csv? –

Répondre

0

Essayez ceci:

from bs4 import BeautifulSoup as bs 
import requests 

res = requests.get("https://en.wikipedia.org/wiki/List_of_naval_battles") 
soup = bs(res.text, "html.parser") 
naval_battles = {} 
for link in soup.find_all("a"): 
    url = link.get("href", "") 
    if "/wiki/Battle" in url: 
     naval_battles[link.text.strip()] = url 

print(naval_battles)