舍近求远,为什么 Golang 要这样读取本地的 package?
我们知道,Python 的第三方库一般是托管到 Pypi 上面的,使用 pip
命令进行安装。而 Golang 很多第三方库是托管在 Github 上面的,使用 go get
进行安装。
有时候,我们会发现一个很奇怪的现象,很多 Golang 的项目,在引用自己项目里面的包的时候,竟然用的是 Github 上面的地址。
我们知道,Python 的第三方库一般是托管到 Pypi 上面的,使用 pip
命令进行安装。而 Golang 很多第三方库是托管在 Github 上面的,使用 go get
进行安装。
有时候,我们会发现一个很奇怪的现象,很多 Golang 的项目,在引用自己项目里面的包的时候,竟然用的是 Github 上面的地址。
在昨天的文章《一日一技:反爬虫的极致手段,几行代码直接炸了爬虫服务器》中,我讲到了后端如何使用gzip返回极高压缩率的文件,从而瞬间卡死爬虫。
大家都知道我的公众号风格,要得罪讨好就两边一起得罪讨好。昨天我帮了后端,今天我就帮帮爬虫。作为爬虫,如何避免踩中gzip炸弹?
最直接的方法,就是把你的爬虫隐藏起来,因为gzip炸弹只能在发现了爬虫以后使用,否则就会影响到正常用户。只要你的爬虫让网站无法发现,那么自然就不会踩中炸弹。
如果你没有把握隐藏爬虫,那么,请继续往下看。
我们今天来看一段炫技代码。它可以把任何能接收两个参数的函数定义成一个特殊的运算符。
在以前的公众号中,我提到Selenium/Puppeteer/Pyppeteer有很多特征可以被网站检测到。于是,有些同学想到了另一个方法,就是自己写一个Chrome插件,在网站打开的时候,注入到页面中,然后通过这个注入的JavaScript代码来操作页面,获取数据。
这个方法理论上说是万能的,因为注入的JavaScript能够获取当前Dom树,任何接口签名都无法拦截到自己注入的JavaScript代码,如下图所示:
我们知道,Python的第三方库一般可以使用pip来安装。如果代码比较简单,我们甚至可以把第三方库的代码复制下来,放到项目里面导入。
但由于JavaScript生态里面,有Node.js这个东西,这就导致第三方库有两种不同的导入方式。如果我们要做一个网站,我们通常会在HTML中,使用<script>
标签引入.js文件,例如:
1 | <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script> |
这样导入了.js文件以后,里面的代码在网页加载完成后就会运行。
但在Node.js生态里面,第三方包一般需要使用npm
安装,然后在代码里面通过require
导入。最后再用webpack打包编译成能直接在浏览器中运行的JavaScript代码。
如果我找到一个第三方的包,它只提供了npm版本,没有提供直接在浏览器中导入的版本怎么办?
假设有这样一个场景,你接了一个私活,帮别人做一个软件,软件没有联网功能。东西做好以后,客户还没有给钱,说要先试用一下。你选择了相信客户,把软件发送给了他。然后他就把你拉黑了。
今天这篇文章,是我今天(1月16日)知识星球直播的概要。详细内容,大家可以观看直播回放视频。已经在知识星球的同学,直接点击连接就能查看回放。尚未加入星球的同学,请在一周后,到我的B站上观看视频。
在写爬虫的过程中,我们经常需要解析网站的列表页。