2016-07-02 2 views
1

link에 색칠 된 텍스트를 추출하려고합니다. 나는 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')}) 

그러나 반환 된 결과는 비어 있습니다. 어떻게 작동하도록 변경합니까?

UPDATE 다음과 같이 내가 코드에서, 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

자바 스크립트를 해석 할 수있는 라이브러리를 사용해야합니다. 예를 들어, fragmark1, fragmark2 등의 요소는 자바 스크립트에 의해 만들어지기 때문에 selenium을 사용합니다.

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

답변 해 주셔서 대단히 감사합니다. 나는 크롬이 없다. 크롬 드라이브를 사용하고 있습니다. 저를 도와 줄 수 있습니까? 새 코드를 UPDATE로 게시했습니다. Please check do –

+0

Firefox가 설치되어 있다면'FireFox'로'Chrome'을 바꿀 수 있습니다. (PhantomJS, Edge, Opera, Ie, Safari, ...도 가능합니다.) 'import selenium.webdriver; print (dir (selenium.webdriver))' – falsetru

관련 문제