如何使用javascript检索的表格内容抓取网站?

时间:2014-04-16 07:57:54

标签: python web-scraping beautifulsoup

我想从网站上抓一张表,看起来像这样;

<table class="table table-hover data-table sort display">
        <thead>
          <tr>
            <th class="Column1">
            </th>
            <th class="Column2">
            </th>
          </tr>
        </thead>
        <tbody>
          <tr ng-repeat="item in filteredList | orderBy:columnToOrder:reverse">
            <td>{{item.Col1}}</td>
            <td>{{item.Col2}}</td>
          </tr>
        </tbody>
</table>

似乎这个网站是使用一些javascript框架构建的,该框架通过Web服务从后端检索表内容。

问题是如果数据不是数字格式,我们如何刮取表格数据?上面的代码包含{{ }}中的内容。这会使网站无法解决吗?有解决方案吗谢谢。

我正在使用python和beautifulsoup4。

3 个答案:

答案 0 :(得分:3)

您可以尝试使用import.io(https://import.io) - 我们的连接器,提取器和抓取工具都支持从使用JavaScript呈现的页面获取数据。如果没有特定的网址,我无法验证您的网站是否有效,但我不明白为什么它不会(看起来它是由AngularJS渲染的应该没问题。)

P.S。如果你还没弄明白,我会在import.io工作 - 如果你有特殊问题,请给我留言。

答案 1 :(得分:2)

通常当有JS内容时,BeautifulSoup不是该工具。我用硒。试试这个,看看你得到的HTML是否可以废弃:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get(url)
driver.set_window_position(0, 0)
driver.set_window_size(100000, 200000)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5) # wait to load

# now print the response
print driver.page_source

此时,您可以使用BeautifulSoup从driver.page_source中删除数据。注意:您需要安装selenium和Firefox

答案 2 :(得分:2)

您可以做的是转到Chrome,然后加载该网站。转到控制台,然后转到网络&#39;标签。勾选&#39;保存日志&#39;在顶部。重新加载站点并加载日志中的所有内容。现在,您可以看到数据来自何处?过滤列表&#39;在你的页面上。因此,在您的刮刀中,您现在也知道数据的来源,因此您可以将其包含在刮刀中。这些数据最有可能采用json格式......可以随心所欲地拾取和摆弄......