BeautifulSoup表数据提取 - 数据未显示

时间:2018-03-22 10:33:16

标签: python web-scraping beautifulsoup

我遇到的问题是运行Python代码时所需的数据没有显示出来。当我在Chrome上“检查元素”而不是“查看源代码”时,它是可见的。

我的代码:

import bs4 as bs
import urllib 
import urllib.request
url='https://ethplorer.io/address/0x8b353021189375591723e7384262f45709a3c3dc'
page=urllib.request.urlopen(url)
soup=bs.BeautifulSoup(page,'html.parser')

cat=0
for category in soup.findAll('td',{'class':'list-field'}):
    print(category)
    cat=cat+1

它拉出了所需的行

<td class="list-field" id="address-token-holdersCount"></td>

然而它有一个值,如下所示2345。

当我使用“Inspect Element”检查页面时,所需的部分如下所示:

<table class="table">
                            <tbody>
                            <tr class="even last">
                                <td>Holders</td>
                                <td id="address-token-holdersCount" 
                                   class="list-field">"2345"</td>
                            </tr>
                            </tbody>
                            </table>

您建议如何解决此问题?

1 个答案:

答案 0 :(得分:4)

正如您自己发现的那样,元素在页面源中,并通过AJAX请求动态加载。 urllib模块(或requests)返回页面源,这就是您无法直接获取该值的原因。

转到Developer Tools&gt; Network&gt; XHR并刷新页面。您将看到向this url发出的AJAX请求:

https://ethplorer.io/service/service.php?data=0x8b353021189375591723e7384262f45709a3c3dc

此url以JSON格式返回数据。如果您查看它,可以使用Holders模块和内置的requests方法从中获取.json()个数字。

import requests

r = requests.get('https://ethplorer.io/service/service.php?data=0x8b353021189375591723e7384262f45709a3c3dc')
data = r.json()

holders = data['pager']['holders']['total']
print(holders)
# 2346