Amp

python 抓取 微信公众号文章

夙愿已清 提交于 2020-10-04 04:37:01
1、下载 Fiddler 安装 具体操作传送门 2、第一步已完成,入门开始吧 首先确保有微信客户端(推荐PC,移动端会多一些操作) 启动微信、Fiddler ,然后找到需要抓取的公众号(还是关注一下吧,都抓取别人的数据了),然后在微信右上角有三个小圆点,左击会有查看历史消息,打开历史消息,然后在Fiddler 中找到对应的请求数据,把整个header都复制了(后期优化),然后通过python 的实现功能代码 代码示例 import requests, sys,os from bs4 import BeautifulSoup as bs, Comment from selenium import webdriver # from base import mysql_conn as db # import random, json, threading # import re, difflib import time # 模拟 手动滑动 def scroll_to_bottom(driver): js = "return action=document.body.scrollHeight" # 初始化现在滚动条所在高度为0 height = 0 # 当前窗口总高度 new_height = driver.execute_script(js) while height < new

PostgreSQL 免费公开课(第13期)(CUUG)(2020年)

笑着哭i 提交于 2020-10-03 20:49:06
十三、PostgreSQL 12.2 PG&Oracle 备份&恢复炫技表演赛 1、PG&Oracle逻辑备份与恢复技术大比拼 2、PG&Oracle物理备份与恢复技术联赛 3、PG&Oracle闪回技术大拼杀 没有比较就没有伤害,知己知彼方能运筹帷幄,在国产化和开源数据库大浪潮的趋势下,早做准备,从容应对。 时间:2020-06-06 20:00-21:00 注:PostgresSQL 12.2 企业级课程系列公开课,是由北京CUUG的陈老师制作讲解,内容涉及到企业中常用到的一些技术,比如备份恢复、PITR、流复制、双机热备、单表查询成本估算、可见性验证、Autovacuum调优、事务隔离级别、并行查询调优、等一系列内容,免费公开课,欢迎大家参与学习。 关于PGCA和PGCE认证,这是PostgreSQL数据库的初级和中级认证,CUUG是指定的培训及考试中心,如想考PG认证,可以联系CUUG咨询老师。 来源: oschina 链接: https://my.oschina.net/u/3902946/blog/4305178

C++中Lamda表达式

我的梦境 提交于 2020-10-03 18:02:52
C++11 的 lambda 表达式规范如下: (1) [ capture ] ( params ) mutable exception attribute -> ret { body } (2) [ capture ] ( params ) -> ret { body } (3) [ capture ] ( params ) { body } (4) [ capture ] { body } 其中 (1) 是完整的 lambda 表达式形式, (2) const 类型的 lambda 表达式,该类型的表达式不能改捕获("capture")列表中的值。 (3)省略了返回值类型的 lambda 表达式,但是该 lambda 表达式的返回类型可以按照下列规则推演出来: 如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。 如果没有 return 语句,则类似 void f(...) 函数。 省略了参数列表,类似于无参函数 f()。 mutable 修饰符说明 lambda 表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。 exception 说明 lambda 表达式是否抛出异常( noexcept ),以及抛出何种异常,类似于 void f ( ) throw (

Redis 是如何处理已过期元素的?[云图智联]

不打扰是莪最后的温柔 提交于 2020-10-03 13:21:11
1 面试题 Redis 如何处理已过期的元素? 2 涉及知识点 此问题涉及以下知识点: 过期删除策略有哪些? 这些过期策略有哪些优缺点? Redis 使用的是什么过期策略? Redis 是如何优化和执行过期策略的? 3 答案 常见的过期策略: 定时删除 惰性删除 定期删除 1)定时删除 在设置键值过期时间时,创建一个定时事件,当过期时间到达时,由事件处理器自动执行键的删除操作。 ① 优点 保证内存可以被尽快的释放 ② 缺点 在 Redis 高负载的情况下或有大量过期键需要同时处理时,会造成 Redis 服务器卡顿,影响主业务执行。 2)惰性删除 不主动删除过期键,每次从数据库获取键值时判断是否过期,如果过期则删除键值,并返回 null。 ① 优点 因为每次访问时,才会判断过期键,所以此策略只会使用很少的系统资源。 ② 缺点 系统占用空间删除不及时,导致空间利用率降低,造成了一定的空间浪费。 ③ Redis 源码解析 惰性删除的源码位于 src/db.c 文件的 expireIfNeeded 方法中,源码如下: int expireIfNeeded(redisDb *db, robj *key) { // 判断键是否过期 if (!keyIsExpired(db,key)) return 0; if (server.masterhost != NULL) return 1; /*

go 的一个orm generator,生成yusa

为君一笑 提交于 2020-10-03 12:45:41
用于生成Go的Model文件,数据库操作太过于麻烦,依靠工具可以直接生成model对象,默认使用的是xorm映射。 需要支持Go mod ,所以版本最好1.11以上 下载: go get -u github.com/anthony-dong/orm-generator 执行 ./build.sh 或者 release里下载压缩版 ~/Downloads/orm-generator-1.0 % ls LICENSE README.md bin build.sh cmd generator go.mod go.sum utils ~/Downloads/orm-generator-1.0 % ./build.sh GOPATH: /Users/sgcx015/go GOBIN: /Users/sgcx015/Downloads/orm-generator-1.0/bin/ CURDIR: /Users/sgcx015/Downloads/orm-generator-1.0 WORK=/var/folders/cs/_wm77lv95j5d88s_q9vr959w0000gn/T/go-build403299929 build finished sgcx015@SGCX015deMacBook-Pro:~/Downloads/orm-generator-1.0 % bin/orm

sentry 配置 X-FORWARDED-FOR 作为真实 ip

孤街浪徒 提交于 2020-10-03 03:41:21
nginx 配置 http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #set_real_ip_from 127.0.0.1; #real_ip_header X-Forwarded-For; #real_ip_recursive on; proxy_set_header Host $host; proxy_set_header X-Client-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X

C++ 之九阴真经之线程工厂(二)

ぐ巨炮叔叔 提交于 2020-10-03 01:29:34
上篇主要介绍了线程工厂的使用场景,这一篇则主要介绍线程工厂的实现。 线程工厂由两部分组成: 一、是工厂类,主要负责创建线程类及数据的接收与提取; 二、是线程接口类,主要定义了线程的入口类及接收消息的公共接口; 按照消息模型,又可以分为基于数据的工厂类与基于任务的工厂类。 工厂类定义: class CThreadFactoryBase { public: virtual ~CThreadFactoryBase() {}; virtual bool IsStop() = 0; virtual bool Pop(AnyVar& val, int waitTime = -1) = 0; }; //任务模型 struct TaskModel {}; //数据模型 struct DataModel {}; template<typename T, typename P> class __ThreadFactory; 任务模型工厂类实现 template<typename T> class __ThreadFactory<T, typename std::enable_if<std::is_same<typename T::ModelType, TaskModel>::value, TaskModel>::type> : public ThreadObject, public

leetcode606(根据二叉树创建字符串)--Java语言实现

会有一股神秘感。 提交于 2020-10-02 20:37:30
求: 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。 示例 1: 输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)" 解释: 原本将是“1(2(4)())(3())”, 在你省略所有不必要的空括号对之后, 它将是“1(2(4))(3)”。 示例 2: 输入: 二叉树: [1,2,3,null,4] 1 / \ 2 3 \ 4 输出: "1(2()(4))(3)" 解释: 和第一个示例相似, 除了我们不能省略第一个对括号来中断输入和输出之间的一对一映射关系。 解: 由于C字符串处理相对复杂,此处直接使用Java提供的字符串轮子。本题重点是先序遍历,这意味着先对当前节点进行操作,再递归调用左右子树。如果当前节点为空,返回空字符串。如果当前节点非空但左右子树均为空,返回当前节点的值。如果当前的左子树或者右子树为空,根据题意,在左子树不空,右子树为空的情况下,可以不打印右子树的()字符串。因此我们对这种情况特殊处理,返回当前节点值和(左子树字符串的拼接结果)。对一般情况(左右子树都有),返回当前节点值+(左子树字符串的拼接结果)+(右子树字符串的拼接结果)。 /** * Definition for a

pulsar netty dns 解析过程

百般思念 提交于 2020-10-02 17:46:34
org.apache.pulsar.client.impl.ConnectionPool.ConnectionPool(ClientConfigurationData, EventLoopGroup, Supplier<ClientCnx>) public ConnectionPool(ClientConfigurationData conf, EventLoopGroup eventLoopGroup, Supplier<ClientCnx> clientCnxSupplier) throws PulsarClientException { this.eventLoopGroup = eventLoopGroup; this.maxConnectionsPerHosts = conf.getConnectionsPerBroker(); pool = new ConcurrentHashMap<>(); bootstrap = new Bootstrap(); bootstrap.group(eventLoopGroup); bootstrap.channel(EventLoopUtil.getClientSocketChannelClass(eventLoopGroup)); bootstrap.option(ChannelOption.CONNECT_TIMEOUT

JAVA 中使用 SQL 语句查询 EXCEL 文件数据

不羁岁月 提交于 2020-10-02 13:22:57
有些业务数据保存在EXCEL文件中,怎么在JAVA应用程序里用SQL语句来查询这些数据,以便进行进一步的计算呢? SQL 语言是基于数据库的查询语言,被查询的数据只能位于数据库中,所以通常的做法是先在数据库中创建临时表,再将EXCEL数据导入后用SQL语句来查询,最后再删除临时表。说起来简单,但是建表、读取EXCEL数据、导入数据库、SQL查询,每一步都意味着大量的编程工作。而且因为EXCEL文件的格式不同,查询需求不同,编写的程序并不能通用,下次还需重新编写程序。 而集算器SPL提供了这种查询功能,完成这个任务就很简单了,只需要2行代码。 例如下面这个info.xlsx文件: 如果要查询出男员工信息,编写SPL脚本如下: A 1 =connect() 2 =A1.query("select * from d:/excel/info.xlsx where Sex=’M’") 在 A2 单元格得到查询的数据后,就可以很容易地做排序、分组、汇总等操作,请参阅 SPL 分组 SPL还可以很方便地处理以下EXCEL需求: 1、 读取自由格式、交叉表、主子表等格式的EXCEL文件 2、 将数据导出、追加到EXCEL文件,输出预设精美格式的EXCEL文件 3、 读写超大数据量的EXCEL文件 4、 合并及拆分EXCEL文件 请参阅 SPL 解析及导出 Excel 。