2016-07-02 12 views
1

Ich versuche, farbigen Text in diesem link zu extrahieren. Ich benutze BeautifulSoup in Python. Der Code ist wie folgt:Extrahieren Javascript aktiviert Daten von Seite

import time, urllib2, re 
from bs4 import BeautifulSoup 
url='http://de.vroniplag.wikia.com/wiki/Aaf/008' 
def gethtml(link): 
    time.sleep(2) 
    req = urllib2.Request(link, headers={'User-Agent': "Magic Browser"}) 
    con = urllib2.urlopen(req) 
    html = con.read() 
    return html 

soup=BeautifulSoup(gethtml(url),'html.parser') 
print soup.findAll('span', attrs={"class": re.compile('fragmark')}) 

Aber das zurückgegebene Ergebnis ist leer. Wie kann ich es ändern, damit es funktioniert?

UPDATE: im Code

ich chromedriver verwende, wie folgt:

from selenium import webdriver 
import os 

chromedriver = "./chromedriver" 
os.environ["webdriver.chrome.driver"] = chromedriver 
driver = webdriver.Chrome(chromedriver) 

driver.get('http://de.vroniplag.wikia.com/wiki/Aaf/008') 
for tag in driver.find_elements_by_css_selector('[class^=fragmark]'): 
    print(tag.text) 
driver.quit() 

Aber der Browser öffnet. Das Ergebnis wird nicht angezeigt. Ich schließe den Browser und dann tritt ein Fehler auf.

Antwort

1

Sie müssen eine Bibliothek verwenden, die Javascript interpretieren kann. Zum Beispiel mit selenium, weil diese Elemente mit fragmark1, fragmark2, ... durch das Javascript erstellt werden.

from selenium.webdriver import Chrome as Driver 
# Replace with `Chrome` with your system browser 

driver = Driver() 
driver.get('http://de.vroniplag.wikia.com/wiki/Aaf/008') 
for tag in driver.find_elements_by_css_selector('[class^=fragmark]'): 
    print(tag.text) 
+0

Vielen Dank für die Antwort. Ich habe kein Chrom. Ich benutze Chrom-Driver, kannst du mir helfen? Ich habe den neuen Code als UPDATE gepostet. Bitte überprüfen Sie –

+0

Sie können 'Chrome' mit' FireFox' ändern, wenn Sie Firefox installiert haben. (PhantomJS, Edge, Opera, Ie, Safari, ... sind ebenfalls möglich). 'importieren selen.webdriver; Drucken (dir (selen.webdriver)) ' – falsetru