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


     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:

    结果:起飞

  • 相关阅读:
    阅读笔记03
    第十三周总结
    阅读笔记02
    第十二周总结
    第十一周总结
    阅读笔记01
    阅读笔记3
    第十一周总结
    阅读笔记
    HDFS-学习总结
  • 原文地址:https://www.cnblogs.com/Alei777/p/15037352.html
Copyright © 2020-2023  润新知