我正在尝试创建一个自动获取网页上表格内容的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}}
如果有人能给我一些帮助,我会非常感激: - )
干杯
答案 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