2016-09-18 35 views
1

我有这个website,我想下载页面的内容。使用python下载动态加载的网页

我试过selenium,并点击按钮,但没有成功。

#!/usr/bin/env python 
from contextlib import closing 
from selenium.webdriver import Firefox 
import time 

# use firefox to get page with javascript generated content 
with closing(Firefox()) as browser: 
    # setting the url 
    browser.get("http://bonusbagging.co.uk/oddsmatching.php#") 
    # finding and clicking the button 
    button = browser.find_element_by_id('select_button') 
    button.click() 
    page = browser.page_source 
    time.sleep(5) 
    print(page.encode("utf8")) 

此代码只下载隐藏数据的源代码。

有人可以告诉我正确的方法吗?或者告诉我如何可以下载隐藏的数据?

在此先感谢!

+0

你试过用beautifulSoup吗? –

回答

2

我总是尽量避免硒像瘟疫时刮;它非常缓慢,并且几乎不是最好的办法。在挖掘之前,你应该深入挖掘源头;在这个页面上清楚的是,html正在进入,然后正在进行单独的调用来获取表格的数据。为什么不与页面进行相同的调用?它闪电般快速,不需要html解析;只是返回原始数据,这似乎是你正在寻找的。 python requests导入是完美的。快乐刮刮!

import requests 

table_data = requests.get('http://bonusbagging.co.uk/odds-server/getdata_slow.php').content 

PS:查找这些调用的最佳方法是打开开发控制台,然后查看网络选项卡。你可以看到这里正在拨打什么电话。另一种方法是去源选项卡,寻找一些JavaScript,并搜索ajax调用(这是我得到了我打电话给上面的URL,路径是:顶部/ odds-server.com /赔率服务器/ JS/table_slow.js)。后面的选项有时更容易,有时几乎不可能(如果文件被缩小/缩小)。做任何适合你的工作!

+0

找到这些呼叫的最佳方式实际上是通过网络选项卡。不是每个人都使用jQuery,并且/或者AJAX调用可以嵌套在某些压缩的源文件中。 [预览](http://i.imgur.com/DJqFclr.png) – mpen

+0

感谢您的评论;你绝对是对的。我已经更新了我的答案以反映这一点。我通常喜欢看js,只是为了了解发生了什么,但你说得对;网络选项卡是万一事情被扼杀或压缩的方式。 – treyhakanson

+0

非常感谢!展望网络标签做了诀窍!再次感谢 – Honzys

0

查看Chrome开发工具中的网络标签。 Nab the URL离开那里。

什么你看是一个DataTable。你可以使用他们的API来获取你需要的东西。

调整“开始”和/或“长度”参数以逐页读取数据。

这是JSON数据,所以它会非常容易解析。

但不错,不要锤这个可怜的家伙的服务器。

+0

非常感谢! – Honzys