hashgard区块链浏览器数据抓取
在对hashgard区块链浏览器数据抓取的目的主要是要获取三类数据,分别是主网token兑换的数据、主网各钱包中的gard余额、以及主网兑换时奖励发放数据。这三种数据抓取的区别在于只请求一次url和循环多次请求url。由于单线程是阻塞式请求,只有在上一次网络请求处理完毕之后才会发起下一次新的网络请求。
def get_record(url): resp = urllib.request.urlopen(url) ele_json = json.loads(resp.read()) return ele_json
在这种简易的数据爬取脚本中,核心的数据请求方法如上面的代码所示,当需要爬取的数据在单个url中时,使用get_record方法可以一次性的url的数据完整的爬取会本地并保存在内存中,以备用于本地的数据处理。
con = pymysql.connect("127.0.0.1", "root", "password不可见", "hashgard", charset='utf8')cur = con.cursor()cur.execute('truncate rewards')con.commit()sql = 'select gard_address from erc20_migrate group by gard_address'sql2 = 'select signer from erc20_migrate group by signer'cur.execute(sql)result = cur.fetchall()cur.execute(sql2)result2 = cur.fetchall()result3 = []for row in result: result3.append(row[0])for row in result2: result3.append(row[0])i = len(result3)while i > 0: i = i - 1 address = result3[i] url = 'https://rest.hashgard.com/gard/api/distribution/delegators/' + address + '/rewards' print(url) resp = get_record(url) print(resp) json1 = json.loads(resp) print(json1)
上面的代码是用于从本地数据库中取得钱包地址,并组装成一个数组,再对数组进行循环,每一次循环就是产生一次远程url请求,根据返回的数据进行本地化处理,处理完成之后进入下一次循环。经过比较,是while循环可以较好的控制循环顺序,而使用for循环则容易出现故障。原因在于本地cpu的循环速度远远高于远程请求url的速度,不好控制程序的执行,因此,这样脚本只适合用于比较简单的数据获取的场景,比如使用一行Python代码获取远程url的数据内容,大概如此之类。 爬取百度成语大全
在爬取百度成语大全的过程中,由于场景要复杂,因此借助了Scrapy爬虫框架,通过编写爬虫的方式,完成数据抓取,由于Scrapy完整的调度功能,可以进行多线程抓取以及复杂的数据处理场景。
爬出百度成语大全仍然是爬取三类数据,分别是成语、成语详情页以及成语的语音文件。通过编写三个爬虫来实现。初次接触Scrapy的代码会有一些不容易理解的感觉,所以主要把基于Scrapy框架开发爬虫的过程描述一下。
1、准备好python环境,包括开发ide工具
2、安装Scrapy框架
3、生成Scrapy项目
scrapy startproject spiders
4、建立爬虫
cd spidersscrapy genspider baiduzici sp0.baidu.com
5、编写baiduzici爬虫的代码
6、依次生成另外两个爬虫
7、编写另外两个爬虫的代码
8、最终得到一个有多个爬虫的工程
每一个爬虫在运行完成之后都会有如下的报告,可以了解到本次爬取工作持续的事件,下载的数据量等等状态,这也是比较完备的数据爬虫方案,可以用于正式的搜索引擎项目开发中。