我遇到的问题是运行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>
您建议如何解决此问题?
答案 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