Juan

经营:https://juanstechblog.blogspot.com/ 来自马来西亚。

iOS14 LikeCoin账号余额Widget(一):爬虫 (笔记)

發布於
利用Python + Selenium写一个小爬虫去抓LikeCoin账号余额。

首先,必须给@catding 大大credit。catding大大写的【Matters使用指南】查看其他用戶的錢包LIKE餘額文章启发我,原来还能通过这种方法查询别人的LikeCoin余额。

一开始我是打算使用LikeCoin API,但在验证(Authentication)方面需要使用OAuth 2.0。这个项目我只是拿来学习和写开心的,没有必要向LikeCoin官方申请OAuth的Client ID或Secret这些东西,这样会太复杂(我觉得LikeCoin官方应该也不会批准吧。)。

这时候,我收藏catding大大的文章就能派上用场了。这个文章让我了解到原来BigDipper网站可以通过Cosmos Address,查询到账号余额。

一开始上网找教程,我希望能在iOS的App上面完成爬虫的工作,我找到了SwiftSoup这个Swift语言的工具。SwiftSoup确实能抓到BigDipper的网页,可是抓到的东西主要是JavaScript。我回头去查BigDipper的代码,发现这个网页的前端使用了React.js。浏览器会先获取JavaScript后,才开始渲染画面,把数据放在对的地方。SwiftSoup是解析(parse)HTML的工具,没有办法从JavaScript获取信息。

好,失败了没关系。


我就换一个方向,去找Python相关的爬虫教学。最后,我找到Selenium的教程,就决定用这个方法。Selenium就是自动化的工具,模仿用户浏览网页,去执行一些操作(一般用在网页测试方面)。

需要的软件:

  • 下载和安装Python
  • Selenium
    在Terminal通过pip安装:
pip install selenium

解释

这边我使用Selenium,让它通过Firefox浏览器去浏览BigDipper网站。在这边添加了一个 "--headless"的设定,让Firefox在后台执行。

    op = webdriver.FirefoxOptions()
    op.add_argument('--headless')
    browser = webdriver.Firefox(
        executable_path="geckodrive的路径",
        options=op)

    url =  "https://likecoin.bigdipper.live/account/" + cosmosWalletAddress

    browser.get(url)

这里需要用time.sleep(0.5),主要是让程序暂停0.5秒,好让浏览器有时间渲染整个网页。

time.sleep(0.5)

在Firefox或Chrome浏览器按下F12,打开查看器(Inspector),然后查看BigDipper网页上的Total值的元素(element),就能从中知道这个元素拥有“class=“value text-right col-8””这个属性(Attribute)。

查看元素

使用Selenium的功能去搜寻指定的元素,只要元素有class=“value text-right col-8””,就返回。

我是在测试后知道“find_elements_by_xpath("//div[@class='value text-right col-8']")”会返回一个List里面有6个值(value)。在List里面最后一个值是我要的东西账号余额,所以这边就直接让它已String的形式返回这个值。

    balance = browser.find_elements_by_xpath("//div[@class='value text-right col-8']")[5].text

基本上到这边就已经抓到我要的东西,可以把浏览器关好关满。

browser.quit()

下面就是完整的代码:

import time
from selenium import webdriver

def scrapeBalance(cosmosWalletAddress):

    op = webdriver.FirefoxOptions()
    op.add_argument('--headless')
    browser = webdriver.Firefox(
        executable_path="刚下载好的geckodriver路径",
        options=op)

    url =  "https://likecoin.bigdipper.live/account/" + cosmosWalletAddress

    browser.get(url)

    time.sleep(0.5)

    balance = browser.find_elements_by_xpath("//div[@class='value text-right col-8']")[5].text

    browser.quit()

    return balance

print(scrapeBalance("这里是你的Cosmos Address"))

到这边,爬虫就完成了,可以开始抓到LikeCoin账号余额。

我自己觉得这个Python程序还能再优化一下。除了接收Cosmos Address以外,我打算下次再做一点升级,让这个程序可以通过Liker ID去抓余额。

好,就写到这边。

有什么意见都欢迎留言。

完。

喜歡我的文章嗎?
別忘了給點支持與讚賞,讓我知道創作的路上有你陪伴。

CC BY-NC-ND 2.0 版權聲明

我终于把想做的东西做出来了。

【Matters使用指南】查看其他用戶的錢包LIKE餘額

3

看不過癮?

一鍵登入,即可加入全球最優質中文創作社區