最近在寻找一些毕设要用到的数据,医药相关的,恰好在某个网站上面找到了备份数据库(手段不太光彩,这里就不细说了),省去了写爬虫的麻烦。

不过这些备份文件是 .MYD / .MYI / .frm 这样的后缀,emmmmm,对于用惯了 .sql 的我来说,还是很头大的。

本篇的主要内容就是如何使用 .frm / .MYI / .MYD 文件来恢复数据库,同时,做了一些关联的延申。

>
mysql

字体反爬虫

初级的字体反爬虫可以参照字体反爬的解决方案——突破抖音反爬虫机制这边文章.

类似的文章教程不胜枚举,所以这里对于 字体反爬虫基础 就不做赘述.本篇要讨论的是如何处理在多大数百、数千个自定义字体的复杂情况下完成从字体文件生成映射字典的工作.

上面提到的文章,采用的是人工映射,这在只有 0~10 这样的简单情况下自然是最方便的处理办法,但是对于大量字体的情况,就捉襟见肘了.并且,即使花了半天时间将这些字体一一映射,万一网站的字体库发生变化,或者网站本身就采用动态字体库,就很麻瓜了.

本着”花半天时间做重复性的苦力工作,不如花一天时间做创造性工作”的原则(预估的开发时间比较充裕,才有时间来实践这些突发的灵感),决定搞一些懒人方法.

>
spiderantispider crack

上周在外网搭建了一个服务,主要是用来对 Mori 的各种处理状态做测试.

今天在看网站统计的时候,发现请求的次数不太正常,主要表现就是出现了下面这种画风的请求.

INFO:     174.49.25.36:51271 - "GET / HTTP/1.1" 200 OK
INFO:     14.139.155.142:41680 - "GET /currentsetting.htm HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:58868 - "GET /wp-content/plugins/wp-file-manager/readme.txt HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:58844 - "GET /?XDEBUG_SESSION_START=phpstorm HTTP/1.1" 200 OK
INFO:     91.241.19.84:42642 - "GET /console/ HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:36206 - "POST /api/jsonws/invoke HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:55124 - "POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:36174 - "GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:42156 - "GET /index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 404 Not Found
INFO:     91.241.19.84:52646 - "GET /?a=fetch&content=<php>die(@md5(HelloThinkCMF))</php> HTTP/1.1" 200 OK
INFO:     91.241.19.84:53606 - "GET /solr/admin/info/system?wt=json HTTP/1.1" 404 Not Found
INFO:     203.205.34.139:47518 - "GET / HTTP/1.1" 200 OK
INFO:     182.185.14.56:62446 - "GET /currentsetting.htm HTTP/1.1" 404 Not Found

随手摘了一个 ip (219.149.212.74) 查询了一下,竟然是国内的 = =|||

又想到从大二下接触 web 开发,到现在两年多,部署了几个服务,但是却没有好好分析过网站的日志文件,正好就趁着这个机会看看吧.

>
awk

前言

目前主要接触的爬虫开发主要有两种:

  1. 静态网页
  2. api

我司已经有静态网页的检测工具,不过随着 api 类爬虫日益增加,需要一个新的可以用来检测 api 变动的脚本.

这里我选择开发一个命令行工具,而非 web 平台服务.理由是前者更加 geek && cool.并且前者只要稍作改动,就可以很好地兼容后者.

我将其命名为 Mori Kokoro , 取自柯南的 毛利小五郎 . 就一个检测脚本而言,它的工作与侦探 🔍 相类似(发现坏家伙 😀).同时这个脚本算是我第一个开发的命令行脚本,无论是代码质量,还是功能实现,都缺乏信心,所以就以毛利为名.

Mori 项目地址

main

>
diyTools

在爬虫实习中遇到了这样一个情境:对一个给定的队列进行数据爬取(比如说是一个公司名称的队列,爬取对应的公司信息),当然不是开发结束就算是完成了,代码无法保证能够应对所有的突发情况,而且我们也需要一个半透明的,甚至是透明的爬虫监控系统,了解爬虫的任务进度,以及过程中遇到的一些问题。

这个监控系统并不难实现,使用 flask 写了一个服务平台,不过是几个小时的事情,但是我在实现过程中遇到一个很有趣的问题:用什么样的数据库来保存这些数据?

笔者写爬虫时常用的数据有 MySQLmongoDBRedis,这三个各有长处,用来针对不同的业务需求;而在写 web 服务时,则常用 MySQLSQLite

这些数据库在不同的情境下各有优劣,正巧最近有些闲工夫,就在这个问题上做了一些发散。

>
Redis

Factory Function for Tuples with Named Fields

Python 除了大家熟知的,可以直接使用的 list、dictionary、tuple 等容器,还有一些放在 collections 包中的容器,这些容器的泛用性不及普通容器,但是在特殊的场景下,有着超过普通容器的性能与便利性。

本篇就在官方文档的基础上,结合笔者的学习工作经验,于管中窥得 nametuple 之一斑。

>
pythonista

前言

极客大赛是我司举办的一个内部的挑战比赛,大致的内容就是拟定一道比赛题目,然后根据最后的完成度进行得分排名。比赛的时间为一天,大抵就是上班到下班这么长的时间。

今年的题目是完成一个票据识别的 app。核心的模块是票据的扫描、识别和后端的存储、统计功能。衍生的加分项就很多了,测试覆盖率、界面设计等等,差不多就是软件的综合完成度、用户体验这些。

比赛

前言

在 Mac 上面安装了 iTerm2 之后,逐渐难以忍受 Windows 上面简陋的终端界面,CMD 就不谈了,即使了 Windows10 加入的 PowerShell ,也依旧差强人意。

PowerShell 强化了 Windows 命令,并且能够让电脑使用部分的 Linux 命令,这是一个重大的进步。其缺点依旧明显,Linux 命令并不完整,对于习惯了使用 Linux 命令行来实现一些骚操作的人来说,难免有点束手束脚。其次,PowerShell 的界面也不太令人满意。

所以这次按照 Windows Terminal Docs , DIY 一个美观的 Terminal。

美化

工作

正式实习已经差不多一周的时间了,爬虫工程师的工作比预想中的要轻松一点,也许因为这只是实习的原因吧,正式工的老哥们倒是回去得挺晚的了。

老实说,在入职之前,对于同期的实习生是抱有一些幻想的。就像是《半泽直树》中的半泽、渡边等同期生一样,结成同期阵营,互相扶持。不过事实和理想还是有所差距的,同期的 6 月份加入的实习生只有一位,还是个没有多少共同语言的女生,emmmmm,还是老老实实工作吧。

mentor 挺不错的,就像是在 HR 面中所说的那样,一直不厌其烦地指导我进行学习。mentor 画饼的功力不如涛哥,所以他所描绘的画卷并没有在我心中掀起多少波澜,只是表面上迎合了一下。吃饼吃多了,还是务实胜过务虚好。

爬虫算是我进入大学后学习的第一个技术了,但是当时并没有深入地了解,只是草草地构建了 requests、selenium 等爬虫常用的技术栈之后,就浅尝辄止了。大学生涯以爬虫始,后端终;职业生涯也是以爬虫始,而且大概率会以后端终。emmmmmm,这么一想,总有一种“这就是命”的奇怪感觉。

实习日常