从页面中提取启用javascript的数据

时间:2016-07-02 10:57:39

标签: javascript python beautifulsoup bs4

我正在尝试在此link中提取彩色文字。我在python中使用BeautifulSoup。代码如下:

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')})

但返回的结果是空的。如何更改它才能使其正常工作?

更新

我正在使用chromedriver,代码如下:

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()

但浏览器会打开。结果不会出现。我关闭浏览器,然后发生错误。

1 个答案:

答案 0 :(得分:1)

您需要使用可以解释javascript的库。例如,使用selenium,因为带有fragmark1fragmark2,...的元素是由javascript创建的。

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)