V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
itskingname
V2EX  ›  推广

如果你不知道做什么,那就学一门杂学吧 [文末送书活动]

  •  4
     
  •   itskingname · 2018-09-27 09:42:01 +08:00 · 16482 次点击
    这是一个创建于 2231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这篇文章没有代码,请放心阅读(送书活动在末尾)。

    多年以后,面对人工智能研究员那混乱不堪的代码,我会想起第一次和 S 君相见的那个遥远的下午。那时的 B 公司,还是一个仅有 6 个人的小团队,Mac 和显示器在桌上依次排开,大家坐在一起,不需要称呼姓名,转过脸去,对方就知道你在和他说话。一切看起来都那么美好,我们所有人,都希望自己和这个公司能够一起成长。

    彼时 S 君刚从加拿大回来,老板把他介绍给我们,于是 S 君作为数据产品经理跟我有了项目上的接触。

    创业公司里面,每一个人都需要会很多的技艺,于是 S 君开始自学 Python。

    有一天,S 君问我:“你玩 MineCraft 吗?“

    “玩,但我更喜欢在 B 站上看别人的世界。”我答道。

    “我觉得我现在写程序,像是在玩我的世界。” S 君笑着说道。

    “是不是觉得你已经掌握了 Python 的基本语法,看着别人把 Python 用的溜溜转,而你自己却不知道用它来做什么?”

    “是这样的,你懂我。”

    “那你学一门杂学吧。”

    于是 S 君被我诱拐过来跟我一起写爬虫。

    后来,S 君离开了 B 公司。

    三个月后,我也离开了。

    从此,我们再也没有见过。

    写爬虫与三峡大坝

    有一天,S 君兴冲冲地跑来跟我说:“我体会到三峡大坝的伟大功能了!”

    “你是爬虫工程师还是水利工程师?”

    “你知道吗,不管上游的水势多么凶猛,从大坝出来以后总是安全而稳定。” S 君并没有回答我的问题,而是自顾自地说道。

    “原来你开始用 Kafka。不错,孺子可教。”

    S 君吐了一下舌头:“还是师傅教导有方。”

    前不久,S 君的爬虫刚刚达到了日产数据千万条的目标。然而他只高兴了一天。因为他发现,数据写到数据库以后,读起来很麻烦。

    S 君有多个数据分析的系统需要从数据库里面读取爬虫爬好的数据,但是从每天千万量级的数据中寻找特定的数据是一个很慢的过程。如果程序遇到异常导致崩溃,又得从头开始读。

    S 君问我:“现在我每一个数据分析的脚本都要从数据库里面读一次数据,做了太多重复的工作,单机单节点的数据库快要撑不住了。我是不是要去学习分库分表搭建集群啊?”

    我告诉 S 君:“这个后面你自然是需要去做的。但现在,你可以先试一试 Kafka,我已经搭建好了一个 Kafka 的集群了,你这样使用……”。

    后来,S 君让所有爬虫把爬到的数据到直接送进了 Kafka,然后再从 Kafka 里面读数据出来,一个 Group 用来备份原始数据,一份 Group 用来生成中间表,一份 Group 用来监控报警,一份 Group 用来绘制 DashBoard。无论爬虫塞给 Kafka 的数据有多少,有多快,从 Kafka 读数据的地方都能按照自己的节奏来消费和使用。

    编程最重要的能力是变通

    S 君是一个老实孩子。

    在开发一个爬虫的过程中,网站接口返回给他的数据看起来是 JSON 格式,于是他就用 Python 自带的 JSON 库去解析。结果解析失败了。因为这些所谓的看起来像 JSON 的东西,竟然没有双引号。

    难道是 JSON 的超集? S 君一通搜索,发现用 YMAL 库也许可以解析这种数据。于是安装 YMAL 库,一解析又报错。

    难道这些数据直接就是 Python 的字典?于是 S 君用上了邪恶的 eval。又报错,因为里面有 null 和小写的 true。

    “你为什么不试一试直接用正则表达式呢?”我对 S 君说。

    “靠!” S 君一拍桌子,旁边的老板吓得把搪瓷杯子里面的快乐水洒在了白衬衣上。

    然后 S 君用正则表达式花了 10 秒钟结束了战斗。

    既然收集了数据就要让它发光发热

    S 君在加拿大留学时学的专业是金融数学和统计。所以他对数据分析也很有兴趣。在他爬虫收集的数据够用以后,我跟他讲了如何使用 Pandas 来分析数据。

    S 君把他分析的酒店价格变化数据给分享给了我们。不愧是金融+数学+统计学背景的高级知识分子 + 超级强大的 Pandas + 超级好用的 Jupyter。这份数据不仅完美再现了过去一年的价格走势,还预测了未来的任何变化,多达四十六张图表似乎穷尽了所有的组合。

    你小学上课传过纸条吗

    “我现在能体会那些半路拦截纸条的人是什么心态了。”这是 S 君第一次使用 Charles 时对我说的话。

    从此以后,我很少看到 S 君分析网页了。因为他学会了在爬虫开发的过程中,首先通过中间人攻击技术分析微信小程序和手机 App。这种方式往往能够直接获得数据,拿到数据以后就能直接储存,再也不用写烦人的 XPath 或者长的跟表情符号一样的正则表达式了。

    有一天,我在玩一个网页版的黑客解密游戏,在网页上寻找某个地方隐藏起来的密码,然后输入每一关的回答框中,答对才能进入下一关。

    游戏有 12 关,而我卡在了第 6 关。只见 S 君拿着电脑走到我面前,指着第 12 关的通关页面跟我炫耀。

    “你是不是用 MITMProxy 替换了这个网站的 Js 文件?”

    “果然还是瞒不过师傅你啊。”

    “你拦截了别人的纸条,做了修改,然后又叠好继续传下去,你有考虑过发纸条的人和收纸条的人的感受吗?”

    “我小学时候不传纸条,都是妹子直接约我的。”

    加密?不存在的

    “前端没有秘密”。S 君在成功逆向了一个网站的 Js 文件以后如是对我说。

    “那是因为这个网站的 Js 代码就赤裸裸地放在你面前,完全没有混淆。”我对 S 君说道。

    “不怕,我可以用 Node.js 来运行混淆过的代码。我已经搭建好 Node.js 服务了,只要把 Js 代码传进去,他就会把结果给我返回回来。” S 君对此似乎一脸自行。

    “你什么时候学会的 Node.js ?”

    “这不是师傅你说过技多不压身吗?既然做爬虫需要动 JavaScript,那我顺手就把 Node.js 给学了。” S 君毫不畏惧的表情,似乎证明他已经猜透了我要问什么。

    “那如果目标没有网站,只有 App 呢?”

    “不怕,Android 逆向工程我也顺便研究了一点。Java 我也看得懂。”

    “看来这些已经不需要我再教你了。”

    你肯定薅了直播答题的羊毛吧

    去年年底的直播答题着实火了一把。那个时候,我和 S 君分开已经有一段时间了。我相信,在全民答题的每一个夜晚,S 君的电脑上一定连着不少于六台安卓手机。这些手机运行着不同的答题平台,能够自动读取屏幕上的问题并自动选择答案。

    我把安卓自动化测试技术教给 S 君,本来是让他结合爬虫,实现群控从而抓取一些难以处理的数据,但我相信他肯定会用来答题。

    变通,这一点他学的越来越好了。

    只希望他不要成为羊毛党。

    后记

    后来,我再也没有见过 S 君这样有趣的人。所以我把我和 S 君的故事写成了一本书:《 Python 爬虫开发 从入门到实战》,现在已在京东,当当与亚马逊上架。

    相信我一次,这本书真的不是从入门到放弃系列。

    爬虫是一门杂学。因为在一个完整的开发过程中,需要涉及到的知识可以包括但不限于:Python,HTML,JavaScript,正则表达式,XPath,数据库,Redis,消息队列,Docker,ELK,Hadoop,数据分析,ETL,中间人攻击,自动化测试技术,可视化……

    这其中的任何一项,在一个大公司里面都可以让很多人来做。

    就像这篇文章里面反复出现的一个词:变通。

    只要能够获得数据,任何技术都可以使用。所谓草木竹石皆可为剑。

    爬虫开发,绝对不仅仅是 Scrapy,PySpider,requests 这些框架或者库的使用。所以在这本书里面,我也刻意减少了框架使用说明的部分,而把重点放在了各种突破反爬虫机制或者使用变通的方法绕过反爬虫机制的方法论和实践中。

    通过学习爬虫,你最后不一定选择爬虫工程师这个岗位,但是在学习爬虫的过程中,你将会接触到的各种工具,方法,服务组件,都会在你以后的生活和工作中帮到你,让你知道,在遇到一个问题的时候,解决方法在哪个地方。

    送书活动

    感谢你读到了这一行,希望我这篇蹩脚的软文没有让你觉得讨厌。新书上架,回馈 V 友。我将会从所有留言的 V 友中选中 6 人,一人赠送一本《 Python 爬虫开发 从入门到实战》。

    按照惯例,选人的方式如下:

    1. 2018 年 9 月 30 日早晨,我会打开网易财经查询 2018 年 9 月 28 日的网易收盘价。
    2. 网易收盘价转成字符串分别加上『 P 』、『 y 』、『 t 』、『 h 』、『 o 』、『 n 』获得 6 个字符串。例如『 2,806.81P 』、『 2,806.81y 』等等
    3. 通过 Python 自带的 hashlib 中的 sha256 算法,计算这 6 个字符串的哈希值。
    4. 哈希值转换为十进制以后除以截至 2018 年 9 月 29 日 10:00 的总楼层数,获得 6 个余数
    5. 6 个余数对应的楼层数将会获得赠书。
    6. 如果同一个人中奖两次,第二次自动顺延给下一层楼。
    7. 顺丰包邮(港澳台、新疆西藏除外)
    第 1 条附言  ·  2018-09-27 11:04:35 +08:00
    我原本给这本书起的书名叫做《虫师的修炼之道》。出版社编辑觉得这样不好做 SEO。为了增加『 Python 』『爬虫』『入门』『实战』方便搜索,才强行改了书名。

    所以请相信我,这真的不是一本从入门到放弃的书。
    第 2 条附言  ·  2018-09-27 12:38:43 +08:00

    抽奖所用的数据,见图中红框框住的这一列。

    第 3 条附言  ·  2018-09-29 12:42:18 +08:00

    开奖啦开奖啦!

    收盘价如图:

    抽奖代码如下:

    恭喜以下六位中奖。

    @Dv @cosmo @ycgk @zerOlike @Mrxiaoxie @wobushizhangsan

    其中576号是我自己。所以顺延给577号。

    请中奖的同时,使用base64编码自己的邮箱回复到本帖并@我。我会使用Y29udGFjdEBraW5nbmFtZS5pbmZvCg== 对应的邮箱给各位发送邮件确认领奖事宜。

    第 4 条附言  ·  2018-09-29 22:03:14 +08:00

    我创建了本书的读者交流群,如果大家对本书有什么期待或者疑问, 可以在群里面进行交流。

    加群方法:

    添加微信公众号

    回复:读者交流

    618 条回复    2019-03-08 11:14:32 +08:00
    1  2  3  4  5  6  7  
    rayless
        1
    rayless  
       2018-09-27 09:46:42 +08:00
    占楼
    muyiluop
        2
    muyiluop  
       2018-09-27 09:54:51 +08:00
    这个抽奖方式很炫酷呀
    hflyf123
        3
    hflyf123  
       2018-09-27 09:56:22 +08:00   ❤️ 1
    前排占楼,这帖子可以当书的前言了,广告有点硬
    redye
        4
    redye  
       2018-09-27 09:58:09 +08:00
    占楼,S 君真是一个有意思的人呐
    fu2kingCode
        5
    fu2kingCode  
       2018-09-27 09:58:11 +08:00
    占楼
    iwfan
        6
    iwfan  
       2018-09-27 09:58:28 +08:00
    好的, 我来学一门杂学
    evegod
        7
    evegod  
       2018-09-27 09:59:35 +08:00
    这个方法实在是相当的有趣了啊
    siyemiaokube
        8
    siyemiaokube  
       2018-09-27 10:00:34 +08:00 via iPhone
    很酷炫啊,滋瓷
    osp321
        9
    osp321  
       2018-09-27 10:01:37 +08:00
    参与参与!!!
    huangzhe8263
        10
    huangzhe8263  
       2018-09-27 10:02:01 +08:00 via Android
    分母
    mouse0809
        11
    mouse0809  
       2018-09-27 10:03:54 +08:00
    占楼、点个赞!
    yegg
        12
    yegg  
       2018-09-27 10:06:22 +08:00 via iPhone
    Cool
    shell314
        13
    shell314  
       2018-09-27 10:06:47 +08:00 via Android
    支持
    hauk0101
        14
    hauk0101  
       2018-09-27 10:07:11 +08:00 via Android
    喜欢这种故事呀
    ctaodream
        15
    ctaodream  
       2018-09-27 10:07:20 +08:00
    我有点想要这本书了
    LeonKennedy
        16
    LeonKennedy  
       2018-09-27 10:08:50 +08:00
    虽然没看懂这个抽奖方式,我还是过来凑个热闹吧
    yuyu2140
        17
    yuyu2140  
       2018-09-27 10:08:56 +08:00
    这个抽奖方式很炫酷呀
    fanhuai
        18
    fanhuai  
       2018-09-27 10:09:28 +08:00
    哈哈哈,占楼
    tony2lord
        19
    tony2lord  
       2018-09-27 10:09:42 +08:00
    我来组成分母
    tinybaby365
        20
    tinybaby365  
       2018-09-27 10:10:51 +08:00
    分母一个
    yingos
        21
    yingos  
       2018-09-27 10:11:49 +08:00 via iPhone
    真的羡慕说学啥就学啥的人
    wspsxing
        22
    wspsxing  
       2018-09-27 10:12:01 +08:00 via Android
    分母+
    yldhgs
        23
    yldhgs  
       2018-09-27 10:12:02 +08:00 via Android
    占个楼
    zhang1215
        24
    zhang1215  
       2018-09-27 10:12:55 +08:00
    分母加一
    itfun
        25
    itfun  
       2018-09-27 10:14:21 +08:00 via iPhone
    test
    Sanko
        26
    Sanko  
       2018-09-27 10:14:32 +08:00 via Android
    分母
    oneast
        27
    oneast  
       2018-09-27 10:14:52 +08:00 via iPhone
    占楼,炫酷的抽奖
    ashin
        28
    ashin  
       2018-09-27 10:16:09 +08:00
    +1
    mkstring
        29
    mkstring  
       2018-09-27 10:18:15 +08:00
    分母
    dove1011
        30
    dove1011  
       2018-09-27 10:18:26 +08:00
    这个抽奖方式不错啊
    moguanqi
        31
    moguanqi  
       2018-09-27 10:18:53 +08:00
    分母+
    moresteam
        32
    moresteam  
       2018-09-27 10:21:27 +08:00
    抽奖专用楼
    itplanes01
        33
    itplanes01  
       2018-09-27 10:23:05 +08:00 via Android
    占楼,支持
    huangda1995
        34
    huangda1995  
       2018-09-27 10:23:20 +08:00 via Android
    占楼
    carpediemvv
        35
    carpediemvv  
       2018-09-27 10:24:20 +08:00 via Android
    不错,占楼,抽不到也要买一本
    shelterz
        36
    shelterz  
       2018-09-27 10:25:17 +08:00 via iPhone
    分母
    Nickkkkkk
        37
    Nickkkkkk  
       2018-09-27 10:25:46 +08:00
    分母 + 1
    rockdodos
        38
    rockdodos  
       2018-09-27 10:26:42 +08:00
    分母来了
    Nagisa1992
        39
    Nagisa1992  
       2018-09-27 10:27:25 +08:00
    分母
    Culture
        40
    Culture  
       2018-09-27 10:27:35 +08:00
    不明觉厉
    Fulminit
        41
    Fulminit  
       2018-09-27 10:28:39 +08:00 via iPhone
    作者好像挺有趣..
    supermooc
        42
    supermooc  
       2018-09-27 10:28:50 +08:00
    资瓷
    Reznik
        43
    Reznik  
       2018-09-27 10:29:59 +08:00
    这帖子是作者本人写的吗,帖子挺有意思的,书也可能有点意思。
    支持一下
    idelo
        44
    idelo  
       2018-09-27 10:30:26 +08:00
    故事写的很好
    samlee123
        45
    samlee123  
       2018-09-27 10:32:47 +08:00
    分子
    Sabermadao
        46
    Sabermadao  
       2018-09-27 10:32:53 +08:00
    nice
    shower
        47
    shower  
       2018-09-27 10:37:09 +08:00
    占楼
    xiaolu
        48
    xiaolu  
       2018-09-27 10:39:41 +08:00 via iPhone
    站楼
    boyxy120
        49
    boyxy120  
       2018-09-27 10:41:09 +08:00
    分母 + 1
    laofuzi
        50
    laofuzi  
       2018-09-27 10:42:39 +08:00
    有意思
    JustinJie
        51
    JustinJie  
       2018-09-27 10:44:13 +08:00
    分母
    li27962278
        52
    li27962278  
       2018-09-27 10:44:54 +08:00
    有点意思
    itskingname
        53
    itskingname  
    OP
       2018-09-27 10:45:02 +08:00
    @Reznik 对,就是我,写书和写故事的人都是我。
    ziyue002
        54
    ziyue002  
       2018-09-27 10:46:29 +08:00
    占楼
    c466934322
        55
    c466934322  
       2018-09-27 10:47:22 +08:00
    厉害的大佬,变通。。。受教了
    wonders2002ok
        56
    wonders2002ok  
       2018-09-27 10:47:36 +08:00
    占楼,看结果。
    hugh114
        57
    hugh114  
       2018-09-27 10:48:11 +08:00
    当个分母吧。。。
    OldDriverKing
        58
    OldDriverKing  
       2018-09-27 10:50:35 +08:00
    好想要一本,感觉作者的编程也会很有意思,感谢!
    Eleflea
        59
    Eleflea  
       2018-09-27 10:52:30 +08:00 via Android
    分母++
    wukongkong
        60
    wukongkong  
       2018-09-27 10:52:59 +08:00 via Android
    努力当分子
    MaxTan
        61
    MaxTan  
       2018-09-27 10:53:16 +08:00
    分母
    Bakumon
        62
    Bakumon  
       2018-09-27 10:53:55 +08:00
    送书了!!!
    dapengzhao
        63
    dapengzhao  
       2018-09-27 10:54:05 +08:00
    分母
    robertding
        64
    robertding  
       2018-09-27 10:55:39 +08:00
    所以需要操盘一下网易么
    DylanZ
        65
    DylanZ  
       2018-09-27 10:57:05 +08:00
    看不懂...
    deepSeaCode
        66
    deepSeaCode  
       2018-09-27 10:57:07 +08:00
    支持一下,抽奖方式很有趣
    0vels
        67
    0vels  
       2018-09-27 11:00:20 +08:00
    感觉不错
    ThunderStruck
        68
    ThunderStruck  
       2018-09-27 11:01:59 +08:00
    当个分母+1
    chainchan
        69
    chainchan  
       2018-09-27 11:03:44 +08:00
    排队 🎉
    paladinx
        70
    paladinx  
       2018-09-27 11:04:05 +08:00
    支持支持,抽奖一下
    hewenlongstu
        71
    hewenlongstu  
       2018-09-27 11:05:25 +08:00
    支持
    sloppysop
        72
    sloppysop  
       2018-09-27 11:07:23 +08:00
    真的看完了,写的很好,准备买书了
    razaura
        73
    razaura  
       2018-09-27 11:08:01 +08:00
    +++
    dao326
        74
    dao326  
       2018-09-27 11:08:47 +08:00
    不错啊!哈哈,耐着性子看完了。。
    BryanYue
        75
    BryanYue  
       2018-09-27 11:09:04 +08:00
    支持下
    simpler
        76
    simpler  
       2018-09-27 11:09:55 +08:00
    感觉抽奖很有意思
    simpler
        77
    simpler  
       2018-09-27 11:10:09 +08:00
    先占个楼
    Depth
        78
    Depth  
       2018-09-27 11:10:19 +08:00
    需要个操盘内幕一下。
    LanAiFaZuo
        79
    LanAiFaZuo  
       2018-09-27 11:11:58 +08:00
    先占个楼
    Nelda
        80
    Nelda  
       2018-09-27 11:16:21 +08:00
    感觉很有意思
    shangbear
        81
    shangbear  
       2018-09-27 11:16:24 +08:00
    支持
    ding5zhuan
        82
    ding5zhuan  
       2018-09-27 11:16:33 +08:00
    居然看完了,我来占楼当分母
    tanglijun
        83
    tanglijun  
       2018-09-27 11:16:42 +08:00
    支持
    liufish
        84
    liufish  
       2018-09-27 11:17:06 +08:00
    占楼,分母+1
    hhz
        85
    hhz  
       2018-09-27 11:18:47 +08:00
    文章写得不错
    dokimaster
        86
    dokimaster  
       2018-09-27 11:21:27 +08:00
    拉低中奖几率
    cein
        87
    cein  
       2018-09-27 11:21:34 +08:00
    nice
    huangshaolong
        88
    huangshaolong  
       2018-09-27 11:21:51 +08:00
    有趣的文章
    babedoll
        89
    babedoll  
       2018-09-27 11:22:03 +08:00
    分母
    6yong
        90
    6yong  
       2018-09-27 11:22:35 +08:00 via iPhone
    good
    rookiewhy
        91
    rookiewhy  
       2018-09-27 11:22:37 +08:00
    分母
    rookiewhy
        92
    rookiewhy  
       2018-09-27 11:22:58 +08:00
    分母+1
    alw1329
        93
    alw1329  
       2018-09-27 11:23:29 +08:00
    支持
    degod
        94
    degod  
       2018-09-27 11:24:03 +08:00 via Android
    拉低中奖率
    PERFECTCN
        95
    PERFECTCN  
       2018-09-27 11:25:03 +08:00
    终于心动了
    guolaopi
        96
    guolaopi  
       2018-09-27 11:28:17 +08:00
    不要钱的占楼
    youngitachi
        97
    youngitachi  
       2018-09-27 11:28:50 +08:00
    我就想问,人名和公司名的代号,是故意的吗?
    虫师的修炼之道,搞个副标题也可以啊
    0x000007
        98
    0x000007  
       2018-09-27 11:30:48 +08:00
    占楼
    xcjx
        99
    xcjx  
       2018-09-27 11:31:13 +08:00
    花哨的抽奖方式…对爬虫并不感兴趣,占个便宜吧
    xiexingk
        100
    xiexingk  
       2018-09-27 11:33:36 +08:00
    分母
    1  2  3  4  5  6  7  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3444 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:43 · PVG 19:43 · LAX 03:43 · JFK 06:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.