2017-11-26 2 views
-1

I'm having some trouble scraping specific content from the following webpage.<a href> tags in Python

http://www.librarything.com/search.php?search=The+Fellowship+of+the+Ring

Die Daten, die ich brauche, ist die ‚Arbeit‘ Nummer des ersten Buchs: http://prntscr.com/hfkiku

Ich habe versucht, mit Schöner Suppe und Selen und nicht in der Lage, einen Weg zu finden, diese Informationen zu erhalten . -Code angehängt:

Jede Hilfe wäre

bearbeiten geschätzt.

def getWebpage(bookName): 
    #website = 'http://www.librarything.com/title/' + bookName 
    website = 'http://www.librarything.com/search.php?search=The+Fellowship+of+the+Ring' 
    #print(website) 

    http = urllib3.PoolManager() 

    request = http.request('GET', website) 

    soup = BeautifulSoup(request.data) 

    websiteP = soup.prettify() 

    driver = webdriver.Chrome() 
    driver.get(website) 

    delay = 5 

    try: 
     WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'p.item'))) 
     print('Page is Ready!') 
     for element in driver.find_elements_by_css_selector('p.item'): 
      print(element.text) 
    except TimeoutException: 
     print('couldnt load page') 
    finally: 
     driver.quit() 

html Ergebnis:

Page is Ready! 
The Fellowship of the Ring: Being the First Part of The Lord of the Rings by J.R.R. Tolkien 
The Lord of the Rings: The Fellowship of the Ring [2001 film] by Peter Jackson 
The Fellowship of the Ring 
The Fellowship of the Ring Journeybook by Matthew Ward 
The Fellowship of the ring by J.R.R. Tolkien 
The Fellowship of the Ring by J. R. R. 
The Fellowship of the Ring Sourcebook by decipherrpg 
The Lord of the Rings: The Fellowship of the Ring: Original Motion Picture Soundtrack by Howard Shore 
The Fellowship of the Ring by Coleman Charlton 
The Fellowship of the Ring {American dramatization} by J.R.R. Tolkien 
The Fellowship of the Ring by aa 
The Fellowship of the Ring Insiders' Guide (The Lord of the Rings Movie Tie-In) by Brian Sibley 
The Lord of the Rings {complete} by J.R.R. Tolkien 
The Hobbit and The Lord of the Rings by J.R.R. Tolkien 
The Fellowship of the Ring by John Ronald Reuel Tolkien; Alan Lee 
J.R.R. Tolkien Reads and Sings The Hobbit and The Fellowship of the Ring by J.R.R. Tolkien 
The Fellowship of the Ring - Part One - Ballantine 
The Fellowship of the Ring {unspecified} 
The Fellowship Of The Ring Isbn 0261102311 
The Fellowship of the Ring [Videorecording] 
The Fellowship of the Ring Sourcebook (The Lord of the Rings Roleplaying Game) by Decipher RPG 
The Fellowship of the Ring Book One 
The Lord of the Rings: The Fellowship of the Ring: Piano, Vocal, and Chords by Howard Shore 

versucht den Code um ein wenig ändern, aber ich konnte nicht überall bekommen.

+2

Ja, BeautifulSoup ist das Werkzeug, das Sie benötigen, um dies zu erreichen. Es gibt die offiziellen Dokumente und viele Tutorials, die erklären, wie man es benutzt. Hier schreiben wir keine Tutorials für Sie, noch verknüpfen wir Personen mit ihnen oder anderen Offsite-Ressourcen. Also, sollten Sie einfach etwas wie "BeautifulSoup Tutorial" googlen, und Sie werden eine Menge nützlicher Informationen erhalten. Das erste, was Sie lernen müssen, ist, wie Sie die Seiten der Website tatsächlich abrufen. Das ist nicht schwer zu tun, und es gibt wieder viele Tutorials dazu. Suchen Sie nach "Python' Anfragen' ". – ForceBru

+0

BTW, kann es auch von Selen gemacht werden. –

+0

@ForceBru Ich habe mehrere Tutorials für Beautiful Soup angeschaut und nichts hat funktioniert. Dies ist der Ansatz, den ich verwendet habe: http://prntscr.com/hfl5yi Das Problem ist, dass die Tags mit der Arbeit Nummer nicht angezeigt werden, wenn ich das HTML der Seite ausdrucken. Ich weiß nicht genau warum. – Univold

Antwort

0

Dies ist einer der Fälle, in denen driver.page_source nicht den erwarteten HTML-Code anzeigt. Wenn Sie jedoch innerHTML des body-Tags auswählen, erhalten Sie, was Sie erwarten.

from selenium import webdriver 
from bs4 import BeautifulSoup 
import time 

#driver = webdriver.Firefox() 
driver = webdriver.Chrome() 
url = "http://www.librarything.com/search.php?search=The+Fellowship+of+the+Ring" 
driver.get(url) 
time.sleep(5) 

#This next line does not show the expected html. 
# print (driver.page_source) 

# But this finds it. 
body = driver.find_element_by_tag_name("body").get_attribute('innerHTML') 
driver .quit() 
soup = BeautifulSoup(body, "html.parser") 
ps = soup.find_all("p", {"class": "item"}) 
for p in ps: 
    print (p.find("a")['href'].split('/')[2]) 

Ausgänge:

3203347 
1354927 
20066223 
4819791 
7170476 
... 

P. S. Willkommen zu StackOverflow ein Wort des Rates, bitte poste deinen Code in deine Fragen, sie werden besser empfangen und es macht es anderen Leuten einfacher, den Code auszuführen, als wenn du es in einem Screenshotbild postest, das nicht leicht zu einem kopiert werden kann IDE.

+0

Danke für die Hilfe und die Einführung, neu zu StackOverflow. Ich hatte nur eine Frage. Gibt es eine schnellere Alternative zu dieser Methode? Ich mache im Grunde ein rudimentäres Buchempfehlungssystem, also werde ich die Nummern für viele verschiedene Bücher brauchen, die, wie ich mir vorstellen kann, eine lange Zeit dauern würden, um diese Methode zu verwenden. – Univold

+0

Ja, es gibt aber ein bisschen mehr Programmierung: Verwenden Sie Scrapy https://scrapy.org/, um alle Bücher auf der Website mit entweder Selenium oder Scrapy & JavaScript-Integration durch Splash https://github.com/scrapy-plugins/ zu holen scrapy-splash siehe https://stackoverflow.com/questions/17975471/selenium-with-scrapy-for-dynamic-page für den Anfang. Wenn diese Antwort Ihre ursprüngliche Frage beantwortet, vergessen Sie nicht, sie zu akzeptieren. –

Verwandte Themen