无法使用python获取javascript生成的html

时间:2017-05-06 06:57:26

标签: javascript python html web-scraping

我正在尝试创建一个自动获取网页上表格内容的python脚本。 我设法让它在纯HTML页面上工作,但是有一个网站让我很头疼...... html似乎是由javascript生成的。 我试过dryscrape,selenium和qt4库,从几个帖子中找到的例子但仍然没有成功......我只是在javascript完成他的工作之前得到的所有时间....所以没有表.... 我可以在浏览器上看到该表,以及何时使用Chrome“检查”html。当我在Chrome中执行“查看页面源”时,该表也不存在...可能会提供一些提示。

该网站如下:

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

这是我尝试的一些代码(如果你检查,答案中没有表格标签):

使用urlib2:

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

使用dryscrape:

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

使用硒:

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

使用PyQt4

{{1}}

如果有人能给我一些帮助,我会非常感激: - )

干杯

1 个答案:

答案 0 :(得分:1)

在搜索任何元素之前,使用隐式等待(或显式的等待?)等待页面加载:

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)

这是我得到的输出:

  

Titel / Titres / Titoli W Nominell Valoren-Nr。 Steuerwert Ertrag /   Rendement / Reddito 2016 M Valeur No de Val。不可用的基准/日期   CP。 W Brutto KG / KEP zu versteuernder V nominale valeur Val。 IMPOSIBLE   Data M Brut Ertrag / Rendement Valore Numero di 31.12.2016 ex。 zahlb。 V   lordo imposable / Reddito nominale valore pay。不可靠的CHF(E)pag。   Fr.W. CHF CHF iShares ETF(CH) - iShares SMI(R)(CH),Schweiz
  瑞士法郎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