2017-05-06 58 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