2017-05-13 3 views
1

Ich versuche, die URLs der Bewertungen auf dieser Webseite http://uk.ign.com/games/reviews dann öffnen die Top 5 in separaten TabsWie kann ich extrahieren URL-Links von IGN Website

Gerade jetzt zu extrahieren, ich habe verschiedene Auswahlen versucht zu versuchen, nimm die richtigen Daten auf, aber nichts scheint etwas zurückzugeben. Ich kann nicht scheinen, die URLs jeder Rezension in der Liste zu extrahieren, geschweige denn die ersten 5 in separaten Tabs zu öffnen.

Ich verwende Python 3 mit Python IDE

Hier ist mein Code:

import webbrowser, bs4, requests, re 

webPage = requests.get("http://uk.ign.com/games/reviews", headers={'User- 
Agent': 'Mozilla/5.0'}) 

webPage.raise_for_status() 

webPage = bs4.BeautifulSoup(webPage.text, "html.parser") 

#Me trying different selections to try extract the right part of the page 
webLinks = webPage.select(".item-title") 
webLinks2 = webPage.select("h3") 
webLinks3 = webPage.select("div item-title") 

print(type(webLinks)) 
print(type(webLinks2)) 
print(type(webLinks3)) 
#I think this is where I've gone wrong. These all returning empty lists. 
#What am I doing wrong? 


lenLinks = min(5, len(webLinks)) 
for i in range(lenLinks): 
    webbrowser.open('http://uk.ign.com/' + webLinks[i].get('href')) 
+0

Glück gehabt, diese Links zu finden? – Nevermore

+0

Ich kann alle Links auf der Webseite finden, aber ich kann die Links nicht finden, die ich will. webLinks = webPage.find_all ('a') gibt mir alle Links auf der Seite Jetzt versuche ich die Links unter "Artikel-Titel" mit "h3" Klasse zu extrahieren. Ich habe versucht, WebItems = webPage.find_all ('a', { 'Klasse': "title"}) webby = webPage.find_all (Klasse _ = "h3") Keines dieser Arbeit, vielleicht sollte ich eine for-Schleife irgendeiner Art? – SeyiA

Antwort

0

Mit BS4 BeautifulSoup und das soup Objekt, um es zurückgibt (die Sie als webPage haben, können Sie anrufen:

webLinks = webPage.find_all('a') 
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, 
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, 
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] 

find_all gibt eine Liste von Elementen auf der Grundlage ihres Titel (in Ihrem Fall ein Dies sind die HTML-Elemente;. zu g und die Links, die Sie brauchen, um einen Schritt weiter zu gehen. Sie können ein HTML-Element Attribute zugreifen (in Ihrem Fall sollten Sie die href) wie würden Sie ein dict:

for a in soup.find_all('a', href=True): 
    print "Found the URL:", a['href'] 

BeautifulSoup getting href Siehe für weitere Details. Oder natürlich der docs

ps Python ist in der Regel mit snake_case geschrieben statt Camelcase :)

+0

Dies funktioniert, und ich las den Abschnitt find_all des Beautiful Soup doc und fragte mich, ob ich find_parents() verwenden müsste, wenn ich bestimmte Links auf einer Webseite ansprechen oder eine for-Schleife verwenden wollte, um die Links herauszuziehen Ich möchte von der ursprünglichen Anweisung find_all ('a') genauso, wie Sie es mit einem '' href '' getan haben. – SeyiA

+0

Hallo! Ich bin froh, dass es funktioniert - ich bin mir nicht sicher über die nächste Frage, die Sie haben, aber ich denke, Sie sind auf dem richtigen Weg: 'find_parents/children' wird ein Objekt zurückgeben, mit dem Sie wieder' find_all' aufrufen können. .. In jedem Fall, wenn dies die Antwort ist, die Sie suchen, markieren Sie es als akzeptiert, damit andere es später finden können :) – Nevermore

Verwandte Themen