• 周四. 6月 30th, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

史上最新、最详细、保姆教程、爬虫:爬取最新500个智能合约

admin

11月 28, 2021
 1 from bs4 import BeautifulSoup
 2 import urllib.request,urllib.error
 3 import urllib.parse
 4 
 5 
 6 count=0
 7 def askURL():#获取当前页的智能合约地址
 8     head={ #模拟浏览器头部信息
 9         "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
10     }
11     #用户代理,告诉豆瓣服务器机器类型。
12     baseurl="https://etherscan.io/contractsVerified/" #获取智能合约地址页面 基地址
13     for i in range(1,10):
14          url=baseurl+str(i)#1-9页 加在基地址后面
15          print(url)
16          request = urllib.request.Request(url,headers=head,method="GET")#封装访问信息
17          response = urllib.request.urlopen(request,timeout=30)#访问网页,必须设置 访问时间超过多少,否则会被拒绝访问
18          html=response.read().decode("gbk")#以gbk的方式解码,添加在列表里
19          Parse_html(html)#在每一个合约中抓取源代码
20 
21 def Parse_html(html):
22     bs = BeautifulSoup(html,"html.parser")#解析每个html文件,
23     head = {  # 模拟浏览器头部信息,向豆瓣服务器发送消息
24         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
25     }
26     t_list=bs.find_all(class_="hash-tag text-truncate") #将每个页面中的25个合约地址获取到
27     str1="https://etherscan.io/address/" #合约页面基地址
28     str2="#code"#合约页面地址的最后部分,合约地址在str1、str2中间
29 
30     for item in t_list:
31         global count #全局变量 文件名
32         url=str1+item.string+str2 #拼全合约地址
33         request = urllib.request.Request(url, headers=head, method="GET") #打包访问信息
34         print("contract:"+url)
35         response = urllib.request.urlopen(request,timeout=30) #访问合约页面
36         contract = response.read().decode("utf-8")  #解析合约页面
37         ds = BeautifulSoup(contract, "html.parser")#用html解析打开
38         contract = ds.find_all(class_="js-sourcecopyarea editor") #定位页面中的合约信息
39         text=contract[0]#只取合约 去除标签
40         result=text.get_text()# 转成string返回给result  因为write只能写string
41         filename = str(count) + 'sourceCode.txt'
42         count=count+1
43         with open(filename, 'w',encoding='utf-8') as file_object:
44              file_object.write(str(result))
45 askURL()

最近由于科研需要,今天手撸了一个爬取etherscan.io官网上最新的500个智能合约代码。

maybe爬虫或者代码架构有些不合理,但是我是一只能抓老鼠的猫!

因为etherscan.io官网是国外的,所以需要FQ才能访问。所以该代码的运行必须保证本机能够FQ。

代码中没有设置国外代理,博主是没有找到个free的国外代理,用的本机的FQ软件。

下面教程,教你一步一步的设置python程序在你本机能够FQ的情况下,从你本地FQ出去爬取智能合约。

First:

 Second:

Third:

 Forth:

结果:起飞

发表评论

您的电子邮箱地址不会被公开。