我想从网站上抓一张表,看起来像这样;
<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。
答案 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格式......可以随心所欲地拾取和摆弄......