2016-12-14 4 views
0

Zunächst einmal sollte es, dass ich PyCharm 2016.02.03, bin mit beachtet werden, und es ist Python 2.7Grabbing Nested Divs BeautifulSoup4 mit (Python 2)

Was ist mein Ziel: Ich versuche, die „Buy zu greifen Preis ", befindet sich unter der Rubrik" Info ". Es ist die erste Reihe nach unten. Hier ist der Link zu der Seite, von der ich versuche den Preis zu kaufen. https://rsbuddy.com/exchange?id=1079&

Wenn Sie den Quellcode von inspizieren Element oder Ansichtsseite Quelle, werden Sie diesen Kaufpreis sehen, ist eine Zeichenfolge in diesem HTML Code-Zeile befindet:

<div id="buy-price" class="col-md-7">41,060 gp</div> 

Die '41, 060 gp‘ist, was Ich versuche zu greifen, um das klar zu machen.

Aber wenn Sie schauen, wo dieses div geschachtelt ist, ist es zwischen TONS von verschiedenen divs davor. Divs mit Klassen, IDs und beiden. Wenn ich Tonnen sage, meine ich wahrscheinlich ungefähr 15+.

Jetzt, da Sie ein klares Verständnis davon haben, was ich greifen muss, zeige ich Ihnen jetzt meinen Code.

import requests 
from bs4 import BeautifulSoup 

def items(max_pages): 
    page = 1 
    while page <= max_pages: 
     url = "https://rsbuddy.com/exchange?id=1079&" 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text, "html.parser") 
     for buy_price in soup.findAll('div', {'id': 'buy-price'}): 
      item = buy_price.string 
      print(item)  
     page += 1 

items(1) 

Wenn ich diesen Code ausführen, passiert nichts. Ich bekomme keine Fehler, nichts. Nur ein leerer Bildschirm mit "Prozess fertig mit Exit-Code 0"

Ich bin mir nicht sicher, was genau das Problem verursacht. Vielleicht kann ich das Div falsch packen (Es hat für mich in einer anderen Situation funktioniert), vielleicht mache ich einen dummen kleinen Fehler, den ich nicht wahrnehme. Ich verstehe es einfach nicht. Ich habe Stunden damit verbracht, es herauszufinden, online zu recherchieren ... Hoffentlich kann jemand helfen.

Beachten Sie, dass ich den HTML-Code nicht angegeben habe, weil es einfach viel zu viel ist. Bitte schau dir einfach die Webseite an und sieh dir den Quellcode an. Bewegen Sie den Mauszeiger über "Preis kaufen" unter der Info-Sektion und klicken Sie mit der rechten Maustaste auf den Quellcode.

+0

Die URL scheint tot zu sein – MYGz

+0

Können Sie bitte angeben, was Sie unter „tot“ verstehen? – CadenDEV

+1

Der von Ihnen angegebene Link gibt keinen HTML-Code zurück. Stattdessen löst es nur den JavaScript-Code aus, der eine API-Anfrage erstellt und der Browser wird gefüllt, wenn die API-Antwort empfangen wird. Jetzt ist Ihre Aufgabe, das JavaScript zu graben und die api URL zu finden, wo die Anfrage gemacht wird. – MYGz

Antwort

2

Diese Seite wird von JavaScript gerendert, Sie können das JavaScript Ihres Browsers deaktivieren und es erneut aufrufen, und dort sind keine Daten vorhanden. Anfragen können den JavaScript-Teil nicht behandeln.

Ich empfehle Selenium JavaScript zu verwenden.

your page without javascript

+0

Oh, ich verstehe. Das kam mir nicht einmal in den Sinn. Also, um es Javascript zu rendern, brauche ich ein ganz neues Skript/Methode um es zu packen? Oder wird es ein und dasselbe Konzept sein, nur ein bisschen anders als eine Technik? – CadenDEV

+1

@CadenDEV verwenden Selen, es ist alles wie Requests, es ist wie eine Brower und Render-Seite für Sie, nachdem es abgeschlossen ist, können Sie Beautifulsoup verwenden, um Daten zu extrahieren. –

+0

@ 宏杰 李 Überprüfen Sie auch dryscape. – MYGz