精华内容
下载资源
问答
  • 交易记录

    2020-12-18 12:59:57
    这一款整理收录发布的交易记录表,可用于学习、参考、借鉴交易记录表相关内容,赶快来下载使用...该文档为交易记录表,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 期货交易记录表.xlsx

    2020-03-06 18:42:51
    良好的交易记录习惯是成功的基础。期货交易记录表是记录决策过程和交易结果的必要表格,通过分析总结不断提高交易水平和交易自律性。
  • 这是一套个人股票交易记录excel模版下载,喜欢的人都来下载吧。该文档为个人股票交易记录excel模版下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 这是一套个人股票交易记录表excel模版下载,喜欢的人都来下载吧。该文档为个人股票交易记录表excel模版下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 个人股票交易记录excel模板下载是一款非常不错的办公模板,有需要的朋友快来下载吧!该文档为个人股票交易记录excel模板下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 个人股票交易记录

    2021-09-02 16:29:06
    个人股票交易记录
  • Android NFC源码读取公交卡信息余额和交易记录 源码亲测可用。可以读取深圳通、羊城通、北京卡、八达通、武汉通等交通卡。
  • 手工将股票交易记录到excel,自动生成图表。记录信息包括买卖,价格,成交量
  • android通过NFC读取公交卡的余额和交易记录 这是别人的项目,但是他的源码放在网盘上,并且源码是eclipse的,所以我移植到android studio上了。。。。博客地址:...
  • 股票交易记录软件

    热门讨论 2012-05-12 10:13:19
    绿色、单文件、支持windows全系统,无毒,不联网,可满足绝大多数日常应用。...本人去年制作的股票记录小软件。本已上传,并有N多下载,今日突然发现资源不见了,故再次上传,希望能给大家带来方便。
  • 如何分析交易记录

    千次阅读 2020-09-17 21:00:00
    【题目】某商场为了分析用户购买渠道。表1是用户交易记录表,记录了用户id、交易日期、交易类型和交易金额。表2是用户类型表,记录了用户支付类型(微信、支付宝、信用卡等),分别有type1、...

    【题目】

    某商场为了分析用户购买渠道。表1是用户交易记录表,记录了用户id、交易日期、交易类型和交易金额。

    表2是用户类型表,记录了用户支付类型(微信、支付宝、信用卡等),分别有type1、type2。

    要求:

    1.请在 type1的用户类型中,找出总交易金额最大的用户。

    2.筛选每个用户的第2笔交易记录。

    3.如下表:如何实现表3的数据格式?

    4.两表做关联时,其中一张表的关联键有大量的null值会造成什么影响?如何规避?

    【解题思路】

    1.type1的用户类型中,找出单用户的总交易金额最大的一位用户?

    我们先来把这个业务需求翻译成大白话:

    1)表中的字段要有用户类型、交易金额、用户id

    2)“单用户的总交易金额”是指每种类型用户的总交易金额

    3)找出用户类型=type1,总交易金额最大的用户

    1)表中的字段要有用户类型、交易金额、用户id

    交易金额、用户id在用户交易记录表中,用户类型在用户类型表中,涉及到两个表的字段,所以需要进行多表联结。

    观察两个表,得知两表的相同字段为用户id ,所以通过用户id联结两张表。

    使用哪种联结呢?拿出《猴子 从零学会SQL》里面的多表联结图。

    因为后面要分析“每种类型用户的总交易金额”,所以保留左表(用户交易记录表)中的全部用户数据。

    select 用户交易记录表.* ,用户类型表.用户类型
    from 用户交易记录表
    left join 用户类型表
    on 用户交易记录表.用户id=用户类型表.用户id;
    

    查询结果:

    2)每种类型用户的总交易金额

    当有“每个”出现的时候,要想到《猴子 从零学会SQL》中讲过的用分组汇总来实现该业务问题。

    根据各用户类型、用户id分组 (group by),统计每个用户数总费用(求和函数sum)

    select 用户交易记录表.*,用户类型表.用户类型,
           sum(用户交易记录表.交易金额) as 总金额
    from 用户交易记录表
    left join 用户类型表
    on 用户交易记录表.用户id=用户类型表.用户id
    group by 用户类型表.用户类型,用户交易记录表.用户id;
    

    查询结果:

    3)找出用户类型=type1,总交易金额最大的用户

    用where 筛选用户类型=type1的用户,按照总金额降序排序(order by decs),找出的第一行(limit 1)记录即为交易金额最大的用户。

    select 用户类型表.用户类型,  用户交易记录表.用户id,
           sum(用户交易记录表.交易金额) as 总金额
    from 用户交易记录表
    left join 用户类型表
    on  用户交易记录表.用户id  = 用户类型表.用户id
    where 用户类型表.用户类型  =  'type1'
    group by 用户类型表.用户类型,  用户交易记录表.用户id
    order by 总金额 desc  limit 1;
    

    查询结果:

    2.筛选每个用户的第2笔交易记录?

    1)题目要求查询“每个用户”,当每个出现的时候,就要想到分组汇总(group by或者窗口函数的partiotion  by)。

    2)第2笔交易记录,是指按照交易时间对每个用户的交易记录进行排名,然后取出排名第2的数据。

    又涉及到分组,又涉及到排名的问题,要想到用《猴子 从零学会SQL》里讲过的窗口函数来实现。

    所以使用分组(窗口函数partiotion by 用户id),并按最后交易时间升序排列(order by交易时间 asc),套入窗口函数的语法,得出下面的sql语句:

    select 用户交易记录表.*,
            row_number() over(partition by 用户交易记录表.用户id 
                              order by 用户交易记录表.交易日期 asc) as 交易笔数
    from 用户交易记录表;
    


    查询结果:

    2)用where 筛选出每个用户的第2条记录,就是每个用户的第2笔交易记录

     

    select * from
    (select 用户交易记录表.*,
    row_number() over(
                     partition by 用户交易记录表.用户id 
                     order  by 用户交易记录表.交易日期 asc ) as 交易笔数
    from 用户交易记录表) as a
    where 交易笔数=2;
    

    查询结果:

    3.如下表:如何实现表3的数据格式?

    题目要求将同一用户、不用的交易时间和交易类型多行合并为一行,用group_concat函数可解决。

    sql入下:

    select 用户id,
    group_concat(交易日期), group_concat(交易类型) 
    from 用户交易记录表
    group by 用户id;
    

    4.两表做关联时,其中一张表的关联键有大量的null值会造成什么影响?如何规避?

    因为在关联表中的全部数据不一定在另一张表都匹配,这样没有匹配到的话就会出现null,避免出现表连接出现null值,只要在表关联时加一个where条件进行判断(not null ),具体见下图

    【本题考点】

    1.如何将复杂的业务问题,使用多维度拆解分析方法,翻译成大白话的能力。

    2.遇到排名问题,要想到使用窗口函数来实现。

    3.多表联结各个情况如何去实现?把上图看懂就可以解决99%的多表联结问题了。

    推荐:如何从零学会sql?

    展开全文
  • erc20根据合约地址获取所有交易记录

    千次阅读 2019-10-16 18:54:50
    2.获取特定区块段,中的特定合约的交易记录 https://api.etherscan.io/api?module=account&action=tokentx&contractaddress=填入合约地址&startblock=0&endblock=10000&pag...

    1.etherscan api地址

    https://etherscan.io/apis
    

    2.获取特定区块段,中的特定合约的交易记录

    https://api.etherscan.io/api?module=account&action=tokentx&contractaddress=填入合约地址&startblock=0&endblock=10000&page=1&offset=100&sort=asc&apikey=YourApiKeyToken
    
    接口原理:按照区块获取交易记录(eth上的es设置只有10000,所以采取这种方式)
    部分参数示例:
    contractaddress 自己的合约地址
    startblock 开始区块
    endblock 结束区块
    page 页数
    offset 每页数量
    &apikey=YourApiKeyToken   测试时(最好修改)可不修改,只是限制调用次数
    

    3.获取eth区块高度

    https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=YourApiKeyToken
    

    实现代码:

     @Scheduled(cron = "0/1 * * * * ? ") // 间隔1秒执行
        public synchronized void tokenTranferRec() {
            try {
                logger.info("获取交易记录");
                ErcConfigEntity ercConfigEntity = ercConfigService.selectById(1);
                String result = GetApi.getApi(TOKENTRANSFERRECSTART +
                        STARTBLOCK + ercConfigEntity.getStartBlock() +
                        ENDBLOCK + ercConfigEntity.getEndBlock() +
                        PAGE + ercConfigEntity.getPage() +
                        OFFSET + ercConfigEntity.getOffset() +
                        TOKENTRANSFERRECEND);
                JSONObject object = JSON.parseObject(result);
                //判断接口调用返回值
                if ("1".equals(object.getString("status"))) {
                    logger.info("已获取到交易记录");
                    JSONArray list = object.getJSONArray("result");
                    for (int i = 0; i < list.size(); i++) {
                        JSONObject ercTraTec = list.getJSONObject(i);
                        ErcTraRecEntity ercTraRecEntity = new ErcTraRecEntity();
                        ercTraRecEntity = JSONObject.toJavaObject(ercTraTec, ErcTraRecEntity.class);
                        logger.info(ercTraRecEntity.getHash());
                        ercTraRecService.insertByHash(ercTraRecEntity);
                    }
                    ercConfigEntity.setPage(ercConfigEntity.getPage() + 1);
                    ercConfigEntity.setOffseted(ercConfigEntity.getOffset());
                    ercConfigService.updateById(ercConfigEntity);
                }
                //当前区块有数据时,不执行区块+10000,page=1的操作
                if (object.getJSONArray("result").size() <= 0) {
                    //当前区段的块中没有记录时,将endBlock赋值给startBlock,endBlock+10000-->判断是否大于当前eth区块高度,
                    //将startBlock,endBlock以及page=1入库。
                    logger.info("start" + ercConfigEntity.getStartBlock());
                    logger.info("end" + ercConfigEntity.getEndBlock());
                    //获取区块高度
                    String resul = GetApi.getApi(ETHBLOCKNUMBER);
                    JSONObject object1 = JSON.parseObject(resul);
                    long out = Integer.parseInt(object1.get("result").toString().substring(2, object1.get("result").toString().length()), 16) + 100000000L;
                    //
                    if (ercConfigEntity.getEndBlock() <= out) {
                        ercConfigEntity.setStartBlock(ercConfigEntity.getEndBlock());
                        ercConfigEntity.setPage(1L);
                    }
                    if ((ercConfigEntity.getEndBlock() + 10000) < out) {
                        ercConfigEntity.setEndBlock(ercConfigEntity.getEndBlock() + 10000);
                    } else {
                        ercConfigEntity.setEndBlock(out);
                    }
                    ercConfigService.updateById(ercConfigEntity);
                }
            } catch (Exception e) {
                logger.error(e.toString());
            } finally {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
    展开全文
  • 保存书店每日交易记录程序设计

    千次阅读 2020-01-05 18:33:55
    编写一个保存书店每日交易记录的程序,使用字节流将书店的交易信息记录在本地的csv文件中。文件命名格式为“销售记录”加上当天日期加上“.csv”后缀 实现: (1)为方便保存图书的信息,可以将图书信息封装成一个...

    案例来源:java基础案例教程,黑马程序员著
    任务描述:
    编写一个保存书店每日交易记录的程序,使用字节流将书店的交易信息记录在本地的csv文件中。文件命名格式为“销售记录”加上当天日期加上“.csv”后缀
    实现:
    (1)为方便保存图书的信息,可以将图书信息封装成一个实体类

    public class Books {
    
    	private int id;
    	private String name; // 图书名称
    	private double price; // 图书单价
    	private int number; // 图书数量
    	private double money; // 总价
    	private String publish; // 出版社
    
    	/**************** 构造方法 ***************/
    	public Books() {
    		super();
    	}
    
    	public Books(int id, String name, double price, int number, double money,
    			String publish) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.price = price;
    		this.number = number;
    		this.money = money;
    		this.publish = publish;
    	}
    
    	/*************** get/set ***************/
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public double getPrice() {
    		return price;
    	}
    
    	public void setPrice(double price) {
    		this.price = price;
    	}
    
    	public int getNumber() {
    		return number;
    	}
    
    	public void setNumber(int number) {
    		this.number = number;
    	}
    
    	public double getMoney() {
    		return money;
    	}
    
    	public void setMoney(double money) {
    		this.money = money;
    	}
    
    	public String getPublish() {
    		return publish;
    	}
    
    	public void setPublish(String publish) {
    		this.publish = publish;
    	}
    
    	/************* 方法 **************/
    
    	/**
    	 * 用于返回图书的详细信息
    	 */
    	@Override
    	public String toString() {
    		String message = "图书编号:" + id + " 图书名称:" + name + " 出版社: " + publish
    				+ " 单价" + price + " 库存数量:" + number;
    		return message;
    	}
    
    }
    
    

    (2)定义RecodeBooksOrder类来记录和操作图书信息

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class RecodeBooksOrder {
    
    	// 创建一个集合用于模拟书架
    	static ArrayList<Books> booksList = new ArrayList<Books>();
    
    	public static void main(String[] args) {
    		// 初始化书架
    		init();
    		// 将书架上所有图书打印出来
    		for (int i = 0; i < booksList.size(); i++) {
    			System.out.println(booksList.get(i));
    		}
    		// 购买图书
    		while (true) {
    			Scanner sc = new Scanner(System.in);
    			System.out.println("请输入图书编号:");
    			int bookId = sc.nextInt();
    			Books stockBooks = getBookById(bookId);
    			// 判断图书是否存在
    			if (stockBooks != null) {
    				System.out.println("当前图书信息:" + stockBooks);
    				System.out.println("请输入购买数量:");
    				int bookNumber = sc.nextInt();
    				// 判断库存
    				if (bookNumber <= stockBooks.getNumber()) {
    					// 将输入信息封装成Books对象
    					Books books = new Books(stockBooks.getId(), stockBooks
    							.getName(), stockBooks.getPrice(), bookNumber,
    							stockBooks.getPrice() * bookNumber, stockBooks
    									.getPublish());
    					// 保存本条数据
    					FileUtil.saveBooks(books);
    					// 修改库存
    					stockBooks.setNumber(stockBooks.getNumber() - bookNumber);
    					stockBooks.setMoney(stockBooks.getMoney()
    							- stockBooks.getPrice() * bookNumber);
    				} else {
    					System.out.println("库存不足");
    				}
    			} else {
    				System.out.println("图书编号输入错误");
    			}
    		}
    	}
    
    	/**
    	 * 初始化书架
    	 */
    	private static void init() {
    		Books goods1 = new Books(101, "Java基础入门", 44.50, 100, 4450.00,
    				"清华大学出版社");
    		Books goods2 = new Books(102, "Java编程思想", 108.00, 50, 5400.00,
    				"机械工业出版社");
    		Books goods3 = new Books(103, "疯狂Java讲义", 99.00, 100, 9900.00,
    				"电子工业出版社");
    		booksList.add(goods1);
    		booksList.add(goods2);
    		booksList.add(goods3);
    	}
    
    	/**
    	 * 根据图书编号查询图书信息
    	 */
    	private static Books getBookById(int bookId) {
    		for (int i = 0; i < booksList.size(); i++) {
    			Books thisBooks = booksList.get(i);
    			if (bookId == thisBooks.getId()) {
    				return thisBooks;
    			}
    		}
    		return null;
    	}
    }
    
    

    (3)定义工具类FileUtil保存图书信息

    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class FileUtil {
    
    	public static final String SEPARATH_FIELD = ","; // 字段分隔 英文逗号
    	public static final String SEPARATH_LINE = "\r\n"; // 行分隔
    
    	/**
    	 * 保存图书信息
    	 **/
    
    	public static void saveBooks(Books books) {
    		/*
    		 * 拼装文件
    		 */
    		Date date = new Date(); // 获取当前时间
    		DateFormat format = new SimpleDateFormat("yyyyMMdd"); // 定义日期格式
    		String name = "销售记录" + format.format(date) + ".csv"; // 拼接文件名
    		/*
    		 * 写入文件
    		 */
    		FileInputStream in = null;
    		try {
    			in = new FileInputStream(name); // 判断本地是否存在此文件
    			if (in != null) {
    				in.close();
    				createFile(name, true, books); // 文件存在,采取修改文件的方式
    			}
    		} catch (FileNotFoundException e) {
    			createFile(name, false, books); // 文件不存在,新建文件
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 将图书的售出信息保存到本地,通过label标识是修改文件还是新建文件 name:文件名
    	 * label:true表示存在,则修改当前文件;false表示不存在,则创建 books:图书信息
    	 */
    	public static void createFile(String name, boolean label, Books books) {
    		BufferedOutputStream out = null;
    		StringBuffer sbf = new StringBuffer(); // 用于拼接内容
    		try {
    			if (label) { // 当已存在当天的文件,则在文件内容后追加
    				out = new BufferedOutputStream(new FileOutputStream(name, true));
    			} else { // 不存在,则创建新文件
    				out = new BufferedOutputStream(new FileOutputStream(name));
    				String[] fileSort = new String[] { "图书编号", "图书名称", "购买数量",
    						"单价", "总价", "出版社" };
    				// 创建文件头部
    				for (String fileKey : fileSort) {
    					sbf.append(fileKey).append(SEPARATH_FIELD);
    				}
    			}
    			sbf.append(SEPARATH_LINE); // 追加换行符
    			// 添加图书的相关信息
    			sbf.append(books.getId()).append(SEPARATH_FIELD);
    			sbf.append(books.getName()).append(SEPARATH_FIELD);
    			sbf.append(books.getNumber()).append(SEPARATH_FIELD);
    			sbf.append(books.getPrice()).append(SEPARATH_FIELD);
    			sbf.append(books.getMoney()).append(SEPARATH_FIELD);
    			sbf.append(books.getPublish()).append(SEPARATH_FIELD);
    			// 写入
    			String str = sbf.toString();
    			byte[] b = str.getBytes();
    			for (int i = 0; i < b.length; i++) {
    				out.write(b[i]);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (out != null) {
    					out.close();
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Selenium爬取智能合约交易记录 1.目的:爬取 https://eth.btc.com/accounts 上的智能合约账户地址及其交易记录数据。 2.方法: 加入元素显式等待 利用selenium爬取记录并判断是否为合约地址or外部地址(有合约地址...

    Selenium爬取智能合约交易记录

    1.目的:爬取 https://eth.btc.com/accounts 上的智能合约账户地址及其交易记录数据。

    2.方法:

    • 加入元素显式等待
    • 利用selenium爬取记录并判断是否为合约地址or外部地址(有合约地址图标的即合约地址)
    • 对爬取的数据做简单的第一步的数据处理使数据格式标准化
    • 将数据追加写入txt中

    3.源代码(Python)

    项目目录结构

    项目结构

    • codeA中爬取的数据会保存在A.txt中
    • codeB中爬取的数据会保存在B.txt中
    # @Content : 账户地址页面 A 爬取
    
    
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ECS
    from selenium.webdriver.common.by import By
    import time
    
    url = 'https://eth.btc.com/accounts'
    opt = webdriver.ChromeOptions()  # 创建浏览
    driver = webdriver.Chrome(options=opt)  # 创建浏览器对象
    driver.get(url)  # 打开网页
    
    pageSum = 2  # 爬取多少页
    all_list = []  # A数据总表
    
    for q in range(1, pageSum + 1):
        print('开始爬取第' + str(q) + '页...')
        try:
            # 定位页面中的table表格元素
            table_loc = (By.CSS_SELECTOR,
                         '#root > div > section > section > main > div > div > div.page-container > '
                         'div:nth-child(2) > div > div > div > div > div > div > table')
            # 等待timeOut秒,直到发现元素
            timeOut = 20
            WebDriverWait(driver, timeOut).until(ECS.presence_of_element_located(table_loc))
        except:
            # timeOut秒后没有发现元素则会执行该方法
            print('执行except方法 : 没有找到对应元素! 当前已爬取到第', q, '页')
            driver.quit()
        finally:
            # 发现元素则执行下面的方法
            # 定位页面中的table表格元素
            element = driver.find_element_by_css_selector(
                '#root > div > section > section > main > div > div > div.page-container > '
                'div:nth-child(2) > div > div > div > div > div > div > table')
            # 找到table元素下面的tr标签元素集合
            tr_content = element.find_elements_by_tag_name("tr")
            # 遍历tr元素
            for tr in tr_content:
                # 在当前表格行tr元素下查找类名为contract-tx-icon的元素
                icon = tr.find_elements_by_class_name('contract-tx-icon')
                type = ''
                if len(icon) != 0:
                    type = '合约地址'
                else:
                    type = '外部地址'
                # 保存当前行的数据
                tempList = [type]
                # 在当前表格行tr元素下查找td表格块集合
                td_list = tr.find_elements_by_tag_name('td')
                # 获取当前行数据中的地址字段上附带的链接
                for td in td_list:
                    urls = td.find_elements_by_tag_name('a')
                    for u in urls:
                        tempList.append(u.get_attribute('href'))
                    tdText = str(td.text).strip().replace(',', '')
                    if len(tdText) > 0:
                        tempList.append(tdText)
                tempLen = len(tempList)
                if tempLen == 8:
                    del tempList[4]
                if tempLen > 1:
                    del tempList[5]
                    with open('../data/A.txt', 'a+', encoding='utf-8') as f:
                        f.write(",".join(tempList))
                        f.write("\n")
                    all_list.append(tempList)
        # 打印本页内容并点击分页按钮继续执行下一页的内容
        print('第' + str(q) + '页爬取结束!')
        # 点击下一页按钮
        driver.find_element_by_xpath(
            '/html/body/div/div/section/section/main/div/div/div[2]/div[3]/div/ul/li[2]/div[3]/i') \
            .click()
        # 点击完分页按钮后等待一秒再进行下页的数据操作,否则会报错
        time.sleep(0.5)
    
    print("全部爬取结束!!! 共", pageSum, '页')
    for line in all_list:
        print(line)
    
    driver.quit()
    
    
    # @Content : 交易记录页面 B 爬取
    
    
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ECS
    from selenium.webdriver.common.by import By
    import time
    
    # 获取A.txt中爬取的链接字段
    urls_in_A = []
    with open('../data/A.txt', 'r', encoding='utf-8') as f:
        for line in f.readlines():
            sp = line.split(',')
            urls_in_A.append(sp[2])
    
    opt = webdriver.ChromeOptions()  # 创建浏览
    driver = webdriver.Chrome(options=opt)  # 创建浏览器对象
    
    recordsMaxNum = 10  # 每页最多爬取多少条
    all_list = []  # B数据总表
    # table css选择器
    t_css = '#accountCopyContainer > div.margin-top-md > div > div.ant-tabs-content.ant-tabs-content-animated.ant-tabs-top-content > div.ant-tabs-tabpane.ant-tabs-tabpane-active > div.account-txns > div.ant-table-wrapper > div > div > div > div > div > table'
    
    for urlA in urls_in_A:
        driver.get(urlA)  # 打开网页
        print('正在爬取...', urlA)
        try:
            # 定位页面中的table表格下面的tbody下面的第一个tr元素
            table_loc = (By.CSS_SELECTOR, t_css+' > tbody > tr:nth-child(1)')
            # 等待timeOut秒,直到发现元素
            timeOut = 20
            WebDriverWait(driver, timeOut).until(ECS.presence_of_element_located(table_loc))
        except:
            # timeOut秒后没有发现元素则会执行该方法
            print('执行except方法 : 没有找到table元素! 当前已爬取到', urlA)
            continue
        finally:
            # 发现元素则执行下面的方法
            # 定位页面中的table表格元素
            element = driver.find_element_by_css_selector(t_css)
            # 找到table元素下面的tr标签元素集合
            tr_content = element.find_elements_by_tag_name("tr")
            # 遍历tr元素
            all_ct = 0
            for tr in tr_content:
                # 每个url最多爬取recordsMaxNum条数据
                if all_ct >= recordsMaxNum:
                    break
                # 保存当前行的数据并将正在爬取的url放入其中作为初始化元素
                tempList = [urlA]
                # 在当前表格行tr元素下查找td表格块集合
                td_list = tr.find_elements_by_tag_name('td')
                # 获取当前行数据中的地址字段上附带的链接
                temp_ct = 0  #计数 ,看是第几个字段,当到达第4个或者第5个字段,也就是地址字段时判断是否为合约地址
                for td in td_list:
                    temp_ct += 1
                    tdText = str(td.text).strip().replace(',', '')
                    if len(tdText) > 0:
                        tempList.append(tdText)
                    if temp_ct == 4 or temp_ct == 5:
                        type = ''
                        # 在当前表格行td元素下查找类名为contract-tx-icon的元素
                        icon = td.find_elements_by_class_name('contract-tx-icon')
                        if len(icon) != 0:
                            type = '合约地址'
                        else:
                            type = '外部地址'
                        tempList.append(type)
    
                if len(tempList) > 1:
                    # 把当前行追加存储在文件B.txt中
                    with open('../data/B.txt', 'a+', encoding='utf-8') as f:
                        f.write(",".join(tempList))
                        f.write("\n")
                    all_list.append(tempList)
                    all_ct += 1
        # 打印本页内容并点击分页按钮继续执行下一页的内容
        print('爬取结束!', urlA)
        # 爬完后过换下一个url
        time.sleep(0.25)
    
    print("全部爬取结束!!! 共", len(all_list), '条!')
    for line in all_list:
        print(line)
    
    driver.quit()
    
    
    展开全文
  • Java解析比特币钱包交易记录

    千次阅读 2018-06-05 20:03:21
    可以通过比特币钱包命令导出相关的交易记录,如果你想统计某个地址或者某个用户的交易时,可以解析该文件。技术很简单,因为导出文件为JSON格式,这里通过alibaba的fastjson来解析。首先,通过命令导出最近两条交易...
  • ​ 之前使用Selenium爬取 https://eth.btc.com/accounts 上的账户地址及其交易记录,但是运行时间很长,而且老报一些错误,所以想到换一种方式来爬取智能合约。 2 方法 先对其抓包,获取请求路径和参数 循环构造...
  • 用360极速浏览器或者chrome浏览器安装该插件后,从网页登录支付宝后,打开该插件,点击开始提取,插件则会自动提取当前支付宝的交易记录并把数据保存在data参数里,以POST的方式发送到配置的数据接收URL.
  • 使用 python + selenium + mongodb实时监控个人支付宝交易账单变化 支付宝目前国内最大最流行的支付软件,风控做的很好,这些年车开的也很稳,为生活提供很大便利。祖国崛起啊!!! 注:只能爬取个人支付宝...
  • 以太坊私链如何查询交易记录

    万次阅读 2018-04-23 11:01:23
    如果要查询主网上的交易记录,可以使用etherscan或etherchain。但是,如果是你自己搭建的私链,应该如何查询交易记录呢? 答案是你需要自己监听链上的日志,存到数据库里,然后在这个数据库中查询。例如: ...
  • 以太坊:获取ETH交易记录

    万次阅读 2019-04-18 10:25:50
    https://api-ropsten.etherscan.io/api?module=account&action=txlist&sort=desc&address=传入要查询的ETH地址 红色部分为测试地址,正式环境查询替换成http://api.etherscan.io ...
  • 本文转载自腾讯技术工程官方号背景:...微信红包的火热带动微信支付的迅猛发展,按当时的发展速度预估,到2015年底,每天的微信支付交易记录会达到20亿。而原有的用户交易记录存储系统无法承受业务迅猛发展带来的冲击,
  • 微信红包的火热带动微信支付的迅猛发展,按当时的发展速度预估,到2015年底,每天的微信支付交易记录会达到20亿。而原有的用户交易记录存储系统无法承受业务迅猛发展带来的冲击,一些瓶颈逐渐凸显出来。本文将
  • 通过上面拿到的block,调用其内部方法 Transactions 可以读取到块中的事物,该事务返回了一个Transaction 类型的列表,然后循环遍历其就可以拿到有关当前区块的详细交易记录了(但是不能直接拿到from) for _ , ...
  • 文章目录用到的库创建钱包(由于和eth共有助记词就用助记词创建)拿到钱包信息(上面获取到的)查询余额和交易记录获取手续费(可用可不用,转账的时候可以写死手续费)获取未消费列表(自己的钞票面值不可分割)计算...
  •  调用FileUtil.savebooks()将此次操作信息记录到本地;  修改书架中图书的数量。 import java.util.* ; public class RecordBooksOrder{ // static关键字来修饰成员变量,该变量被称为静态变量,静态...
  • 查看账户整体交易记录时才有。) "gas" : "200000" , // 手续费上限 "gasPrice" : "16379999999" , // 手续费价格 "gasUsed" : "69325" , // 实际花费手续费 "cumulativeGasUsed" : "1936120" ,...
  •  比特币系统中记录了一条条的交易记录,多条交易记录打包成一个区块,一个个区块按照时间顺序连接起来。整个区块链上的每一个区块中的每一笔交易对于每个人都是可以查看的,使用“比特币区块浏览器”就可以查看,它...
  • android实现或者web3j实现,大神们来帮帮忙!!!!!!!!!!
  • 交易记录表设计注意点

    千次阅读 2017-02-28 16:33:40
    另外,交易记录不建立使用太多的代码表示特定意思,一是时间太久了会看不明白代码是什么意思,二是代码可能被重复使用。 所有交易必须有数据完整性校验,即一行记录一旦生成后其校验串也就固定了,防止有人恶意...
  • eos获取用户的交易记录

    千次阅读 2018-08-17 19:00:07
    获取用户交易记录的方法:get_actions 调用此方法必须 配置 filter-on = * 或者打开mongodb插件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,765
精华内容 59,506
关键字:

交易记录