【问题标题】:Can't get javascript generated html using python无法使用python获取javascript生成的html
【发布时间】:2017-10-04 16:29:15
【问题描述】:

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

网站如下:

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

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

使用 urllib2:

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

使用干刮:

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

如果有人能在这方面给我一些帮助,我将不胜感激:-)

干杯

【问题讨论】:

  • 你能发布一些你试过但没有用的代码吗?
  • 看看这个:stackoverflow.com/questions/43423656/… 你想尝试使用 PhantomJS 驱动等待 JS 加载页面内容。
  • @DeanFenster 我发布了一些不起作用的代码(返回没有表格的 html)
  • 感谢@elena 的链接!我试过了,但我得到了同样的结果:html 代码作为回报,但里面没有表格...... :-(

标签: javascript python html web-scraping


【解决方案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 / Rendment / Reddito 2016 M Valeur No de Val。不可能的基准/日期 CP。 W Brutto KG/KEP zu versteuernder Vnominale valeur Val。不可能的 数据 M Brut Ertrag/Rendement Valore Numero di 31.12.2016 ex。扎尔布五 lordo imposable/Redditonominale valore pay。不负责任的 CHF (E) 页。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2012-02-16
    相关资源
    最近更新 更多