-
无头浏览器反爬与反反爬
总结一下最近做的无头浏览器(chrome headless 的检测以及反检测)。无头浏览器的检测应该是爬虫中非常重要的一块,一开始接触到的是 not-possible-to-block-chrome-headless 这个文章,大概是最初级的无头浏览器检测方案。不过在后续的爬虫中,有一种魔高一尺,道高一丈的感觉,陆续发现很多站点都能通过各种其他手法检测无头浏览器。再后来,看一些网站的js,发现了他们会对很多字段进行收集,都与fingerprintjs2 收集的差不多,才算是豁然开朗。故在此...…
-
scons 简单入门
简单入门hello worldscons由Sconstruct 作为入口,控制如何进行编译操作。Sconstruct 本身是一个python文件,故需要遵循python的语法,以及能使用一些python的方法。(如我们可以用print 来debug)这有一段很简单的hello.cpp#include <iostream>int main() { std::cout << "hello world" << std::endl;}以及一个很简单的Sco...…
-
布隆过滤器扩容及删除过期数据
我们知道,布隆过滤器是不可变的,但如果布隆过滤器容量确实不够了,该怎么办呢?或者如果要每个月都删除几个月前的去重数据,该如何处理呢?这边要记录一种布隆过滤器的巧用,多个布隆过滤器组成的循环布隆过滤器。布隆过滤器布隆过滤器的细节这边不做赘述,他在创建的时候就确定了容量以及错误率(false postive),为了后续的方便,这边假设我们有了一个可靠的布隆过滤器。class BloomFilter(object): def __init__(self, capacity, error_r...…
-
mac vpn翻墙,部分网站走vpn
需求是这样,现在有一个vpn,我可以通过这个vpn翻墙,但同时我需要访问内网,换言之,就是需要白名单或者黑名单翻墙的机制。mac上使用vpn很方便,偏好设置中就可以直接弄,但是没找到合适的黑白名单机制,没办法,只能另辟蹊径,通过iptable来指定不同的ip走不同的网卡。 通过ifconfig找到vpn使用的虚拟网卡名以及非vpn的时候使用的网卡 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 o...…
-
golang hijack打开方式
简介Hijacktype Hijacker interface { // Hijack lets the caller take over the connection. // After a call to Hijack the HTTP server library // will not do anything else with the connection. // // It becomes the caller's responsibility to manage // and...…
-
groupcache源码中几个有趣的点
简介 groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.groupcache是一个可分布式缓存组件,用于在某些方面替代memcache,不过和一般的缓存有些区别,它只能做get操作(没错,只能get),但是不能做更新和删除操作。另外,groupcache可以很方便的集成到应用程序中,用http接口的形式与其他程序交互。几个概念 ...…
-
对go中function type的一点思考
function type 可以理解为一组拥有相同参数类型和结果类型的方法的集合。我看也有人管他叫接口型函数。 A function type denotes the set of all functions with the same parameter and result types. The value of an uninitialized variable of function type is nil. Two function types are identical i...…
-
品读 werkzeug reloader 实现机制
werkzeug使用reloader可以在文件被改变时自动加载更改过的文件,使用方法也很简单,run_simple('localhost', 4000, application,use_reloader=True),ues_reloader=True即可。本文试图去品读一下reloader的实现以及一些小细节。原理先概述下整个reloader的原理,看起来会舒服一些。非reloader的启动很简单,会调用make_server方法,然后调用serve_forever()去循环获取新的请求。...…
-
TIME_WAIT状态存在的意义
什么时候会TIME_WAITTCP在关闭的时候有个四次挥手的过程,主动关闭方在四次挥手的最后一个ACK发送之后会变成TIME_WAIT状态。主动关闭方跟握手不同,挥手可以由客户端发起,也可以是服务端发起。发起关闭的一端我们称之为主动关闭方,另一端称之为被动关闭方。四次挥手 主动关闭方会发送一个FIN给被动关闭方,表示数据已经发送完毕。 被动关闭方接收到FIN,响应一个ACK。它的接收作为一个文件结束符(end-of-file)传递给接收端应用进程(放在所有已排队等候该应用进程接收的任何...…
-
简析pyspider
pyspider优势所在pyspider非常适合那种很小很杂的爬虫的管理,比如有100个小网站,规则又各不相同,我要获取他的一些很简单的内容,如标题,所有的图片,正文内容。他分为几个模块:scheduler,fetcher,processor,resultworker以及一个ui,前三者各自分离,用消息队列连接,因此很容易做成分布式(或者说设计之初就是为了分布式的)。scheduler了解scheduler之前,先了解两个概念,一个是project,代表着一个项目,如百度爬虫项目;一个是t...…