2017-05-06 60 views
-1

我試圖創建一個python腳本,它可以自動獲取網頁上表格的內容。 我設法使它在純html頁面上工作,但有一個網站,讓我頭痛... 該html似乎是由JavaScript生成的。 我嘗試了dryscrape,selenium和qt4庫從幾個帖子中發現的例子,但仍然沒有成功......我只是得到所有的時間在JavaScript之前的HTML做他的工作....所以沒有表.... 我可以請參閱瀏覽器上的表格,以及何時使用Chrome「檢查」html。當我在Chrome瀏覽器中查看頁面源代碼時,表格也不存在......可能會給出一些提示。使用python無法獲取javascript生成的html

網站如下:

https://www.ictax.admin.ch/extern/en.html#/security/CH0008899764/20161231

下面是一些代碼,我嘗試了(如果您檢查答案不表標籤):

使用urlib2:

import urllib2 
url="https://www.ictax.admin.ch/extern/en.html#/security/CH0008899764/20161231" 
html = urllib2.urlopen(url) 
print html 

使用dryscrape:

import dryscrape 
session = dryscrape.Session() 
session.visit(url) 
response = session.body() 
print response 

使用硒:

from selenium import webdriver 
driver = webdriver.Chrome("/usr/lib/chromium/chromedriver") 
driver.get(url) 
print driver.page_source #page_source fetches page after rendering is complete 
driver.quit() 

使用PyQt4的

import sys 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 
from lxml import html 

class Render(QWebPage): 
    def __init__(self, url): 
    self.app = QApplication(sys.argv) 
    QWebPage.__init__(self) 
    self.loadFinished.connect(self._loadFinished) 
    self.mainFrame().load(QUrl(url)) 
    self.app.exec_() 

    def _loadFinished(self, result): 
    self.frame = self.mainFrame() 
    self.app.quit() 

#This does the magic.Loads everything 
r = Render(url) 
#result is a QString. 
result = r.frame.toHtml() 
#QString should be converted to string before processed by lxml 
formatted_result = str(result.toAscii()) 
print formatted_result 

我將不勝感激這麼多,如果有人能夠給我一些幫助在此:-)

乾杯

+0

你能發表一些你試過的代碼嗎? –

+0

看看這個:http://stackoverflow.com/questions/43423656/trip-advisor-scraping-morelink/43424006#43424006 你想嘗試使用PhantomJS驅動程序來等待JS加載頁面內容。 – elena

+0

@DeanFenster我發佈了一些不起作用的代碼(不帶表格返回html) – Fleppi

回答

0

使用在搜索任何元素之前隱式等待(或明確的等待)以等待頁面加載:

import selenium 
from selenium import webdriver 
driver = webdriver.PhantomJS() 
url = "https://www.ictax.admin.ch/extern/en.html#/security/CH0008899764/20161231" 
driver.get(url) 
driver.implicitly_wait(30) 
print(driver.find_element_by_tag_name("table").text) 

這是我得到的輸出:

影片名稱/滴度/ TitoliW¯¯Nominell Valoren-NR。 Steuerwert Ertrag/ Rendement/Reddito 2016 M Valeur No de Val。強制性的基準/日期 Cp。 W Brutto KG/KEP zu versteuernder V nominale valeur Val。不可能的 Data M Brut Ertrag/Rendement Valore Numero di 31.12.2016 ex。 zahlb。 V lordo impostable/Reddito nominale valore pay。瑞士法郎(E)頁面 Fr.W.瑞士法郎iShares安碩ETF(瑞士法郎) - iShares SMI(R)(CH),瑞士法郎
瑞士法郎0.00 889 976 85.31 25.02。 29.02。 36瑞士法郎0.48
03.03。 07.03。 37瑞士法郎0.48
11.04。 13.04。 38瑞士法郎0.70
19.07。 21.07。 40瑞士法郎0.88
19.07。 21.07。 39瑞士法郎0.20

+1

確實,這工作!非常感謝埃琳娜! – Fleppi