如何使用爬虫爬行元宇宙浏览器上的交易列表数据

2022-06-05 10:23:57

前言

           

端午节安康,2022年6月3日。

           

今天,我们主要分享如何使用爬虫爬行元宇宙浏览器上的交易列表数据。

           

原因

           

dune上没有bsc链上的转账明细数据表。Footprint Analytics上现有的bsc_transactions表transfer_type粒度不够。

           

环境

           

python 3.7

           

数据存储:mysql 5.7

           

缓存:redis 6.2.6

           

开发工具:pycharm

           

思路

           

(1)所有协议,合同,swap地址转账信息全部攀爬不切实际,对存储要求较高。因此,对于需要分析的协议,爬行相应的智能合同转账是一个不错的选择。

           

(2)元宇宙浏览器必须有反爬机制。因此,在选择代理时,我们应该选择外国代理。国内代理商无法访问。你知道具体原因。本文不涉及代理部分,因为外国代理制造商以前不知道。然而,即使是代理,代码水平的变化也相对较小

           

(3)采用了urllib同步请求 随机休眠范围内。降低了被风险控制的概率。但也降低了爬虫的效率。

           

后面再研究用scrapy或异步请求    [1]

           

[1] 同步:请求发送后,下次发送前需要接收返回消息。异步:无需等待收到返回消息。

           

实现

           

找到需要爬行合同的具体地址:

           

第一页

           
http://bscscan.com/txs?a=0xbd3bd95529e0784ad973fd14928eedf3678cfad8
           

第二页

           
https://bscscan.com/txs?a=0xbd3bd95529e0784ad973fd14928eedf3678cfad8&p=2
           

第三页

           
https://bscscan.com/txs?a=0xbd3bd95529e0784ad973fd14928eedf3678cfad8&p=3
           

....

           

可以知道 p = ?就代表页数。

           

然后F点击网络,刷新界面,查看网络请求信息。

           

主要查看网页上显示的数据,哪个文件响应。如何响应,请求方法是什么?

           

python爬取元宇宙浏览器上的交易列表数据

           

python爬取元宇宙浏览器上的交易列表数据

           

如何验证,就是找个人txn_hash按下响应数据ctrl f搜索,搜索说明必须返回此文件。

           

python爬取元宇宙浏览器上的交易列表数据

           

查看响应数据,是的html的格式。在python里面,处理html个人常用的数据是xpath(当然,如果你更擅长的话BeautifulSoup也可以)

           

在python内部安装相关依赖

           
pip install lxml ‐i https://pypi.douban.com/simple
           

同时安装在浏览器上xpath插件可以更好地帮助我们获得网页中元素的位置

           

XPath Helper - Chrome 网上应用商店 (google.com)

           

然后可以通过插件定位,返回的结果是list

           

**注:**浏览器看到的所有网页都是由浏览器渲染的。有一种情况是,数据可以在浏览器中定位,但代码中没有值。此时,您可以通过鼠标右键查看网页源代码,然后进行搜索

           

python爬取元宇宙浏览器上的交易列表数据

           

python爬取元宇宙浏览器上的交易列表数据

           
# 请求和xpath具体实现代码定位:def start_spider(page_number):    url_base = 'http://bscscan.com/txs?a=0xbd3bd95529e0784ad973fd14928eedf3678cfad8&'    # 请求头    headers = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',        'referer': 'https://bscscan.com/txs?a=0xbd3bd95529e0784ad973fd14928eedf3678cfad8'    }    # 需要输入的参数    data = {        'p': page_number    }    # 将参数转为Unicode编码格式    unicode_data = urllib.parse.urlencode(data)    # 拼接网址    # http://bscscan.com/txs?a=0xbd3bd95529e0784ad973fd14928eedf3678cfad8    url = url_base   unicode_data    # 自定义request对象    request = urllib.request.Request(url=url, headers=headers)    # 模拟浏览器发送请求    response = urllib.request.urlopen(request)    # 将返回的数据利用lxml转为    tree = etree.HTML(response.read().decode('utf‐8'))    # //div[@id='paywall_mask']//tbody//td//span/a[@class='myFnExpandBox_searchVal']/text()    txn_hash_list = tree.xpath("//div[@id='paywall_mask']//tbody//td//span/a[@class='myFnExpandBox_searchVal']/text()")    # //div[@id='paywall_mask']//tbody//td//span[@class='u-label u-label--xs u-label--info rounded text-dark text-center']/text()    method_list = tree.xpath(        "//div[@id='paywall_mask']//tbody//td//span[@class='u-label u-label--xs u-label--info rounded text-dark text-center']/text()")    # //div[@id='paywall_mask']//tbody//td[@class='d-none d-sm-table-cell']//text()    block_list = tree.xpath("//div[@id='paywall_mask']//tbody//td[@class='d-none d-sm-table-cell']//text()")    # //div[@id='paywall_mask']//tbody//td[@class='showAge ']/span/@title    age_list = tree.xpath("//div[@id='paywall_mask']//tbody//td[@class='showAge ']/span/@title")    # //div[@id='paywall_mask']//tbody//td/span[@class='hash-tag text-truncate']/@title    from_list = tree.xpath(        "//div[@id='paywall_mask']//tbody//td/span[@class='hash-tag text-truncate']/@title")    # //div[@id='paywall_mask']//tbody//td[@class='text-center']/span/text()    transfer_type_list = tree.xpath("//div[@id='paywall_mask']//tbody//td[@class='text-center']/span/text()")    # //div[@id='paywall_mask']//tbody//td/span/span[@class='hash-tag text-truncate']//text()    to_list = tree.xpath("//div[@id='paywall_mask']//tbody//td/span/span[@class='hash-tag text-truncate']//text()")    # //div[@id='paywall_mask']//tbody//td/span[@class='small text-secondary']/text()[2]    transfer_free_list = tree.xpath(        "//div[@id='paywall_mask']//tbody//td/span[@class='small text-secondary']/text()[2]")
           

然后是使用redis,对txn_hash去重去重的原因是为了防止一个数据多次被爬

           
def add_txn_hash_to_redis(txn_hash):    red = redis.Redis(host=根据自己的配置, port=6379, db=0)    res = red.sadd('txn_hash:txn_set', get_md5(txn_hash))    # 如果返回0,说明插入不成功,说明重复    if res == 0:        return False    else:        return True# 将mmsi进行哈希,用哈希去重更快def get_md5(txn_hash):    md5 = hashlib.md5()    md5.update(txn_hash.encode('utf-8'))    return md5.hexdigest()
           

最后一个需要考虑的问题是:交易是增量的,也就是说,当前第二页的数据很可能会在会议结束后进入第三页。我的策略是不管页面数量的变化如何。一直往下爬。完全爬,然后从第一页爬上新的交易。直到你遇到第一次完全爬行txn_hash

           

python爬取元宇宙浏览器上的交易列表数据

           

最后,存储在数据库中。没什么好说的。

           

python爬取元宇宙浏览器上的交易列表数据

           

以上可以在转账列表中获得。txn_hash,后面还要写一个爬虫深入列表,通过txn_hash爬细节页面的信息。下一篇文章再说一遍,代码还没写完。

           

今天就到这里。ヾ(?ω?`)o

           

来源:Bress

           

作者:撒酒狂歌

拓展阅读
首先:钱包地址。 我们知道元宇宙帐户的密钥分为公钥和私钥。一般来说,我们在钱包里看到的地址是我们公钥地址的一部分,但是公钥太
2022-06-02 阅读(18)
imtoken新版本功能在不断提升,可以通过软件进行自由代币交换,可以实时了解汇率的变化,获得更专业的选择,可以全面关注到市场投资变
2022-06-01 阅读(10)
现在人们金融理财的方式也越来越多样化。imtoken网址钱包也属于金融理财的范畴。而且应用这款钱包的人数也在不断的增加。金融
2022-06-01 阅读(9)
去哪下载imtoken钱包最安全是用户所关心的,在下载APP软件的过程中要通过专业的平台了解最优质的版本可以下载体验,通过软件了解元
2022-06-01 阅读(9)
imtoken钱包APP下载备受统资者关注,这款钱包是全球知名的数字资产钱包,而且安全好用,有着强大的功能性特点,可以自由创建和导入钱包
2022-06-01 阅读(8)
imtoken钱包APP下载备受统资者关注,这款钱包是全球知名的数字资产钱包,而且安全好用,有着强大的功能性特点,可以自由创建和导入钱包
2022-06-01 阅读(8)
imtoken地址对于实际下载有很大的影响,需要通过专业的软件了解具体下载优势,对软件核心资源有全面的认知度,每个人的投资方式是不
2022-06-01 阅读(8)
全球数字货币资产链在不断发生变化,在炒币的过程中要了解整个市场的变化条件,要了解完整的元宇宙数据,了解整个产品的使用价值。im
2022-06-01 阅读(7)
在虚拟货币圈真的有很多人都上当受骗过,有些人甚至连原因都找不到就稀里糊涂丢了钱,这是我们最不想看见的事情。我们经常能看到就
2022-06-01 阅读(7)
2021年注定是要载入虚拟货币发展历史的隆重一年,我国央行先是于9月份发布了《关于进一步防范和处置虚拟货币交易炒作风险的通知
2022-06-01 阅读(7)
快讯
热门文章
推荐阅读