如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
itskingname
V2EX  ›  推广

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

  •  4
     
  •   itskingname · Sep 27, 2018 · 24425 views
    This topic created in 2969 days ago, the information mentioned may be changed or developed.

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

    多年以后,面对人工智能研究员那混乱不堪的代码,我会想起第一次和 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. 顺丰包邮(港澳台、新疆西藏除外)
    Supplement 1  ·  Sep 27, 2018
    我原本给这本书起的书名叫做《虫师的修炼之道》。出版社编辑觉得这样不好做 SEO。为了增加『 Python 』『爬虫』『入门』『实战』方便搜索,才强行改了书名。

    所以请相信我,这真的不是一本从入门到放弃的书。
    Supplement 2  ·  Sep 27, 2018

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

    Supplement 3  ·  Sep 29, 2018

    开奖啦开奖啦!

    收盘价如图:

    抽奖代码如下:

    恭喜以下六位中奖。

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

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

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

    Supplement 4  ·  Sep 29, 2018

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

    加群方法:

    添加微信公众号

    回复:读者交流

    618 replies  •  2019-03-08 11:14:32 +08:00
    1  2  3  4  5  6  7  
    ❮ ❯
    spemoon
    spemoon
    Sep 27, 2018
    501
    厉害厉害
    davidf
    davidf
    Sep 27, 2018
    502
    厉害了。等开奖
    luckyswag
    luckyswag
    Sep 27, 2018
    503
    为拉低中奖率不折手段 1️⃣
    luckyswag
    luckyswag
    Sep 27, 2018
    504
    为拉低中奖率不折手段 2️⃣
    luckyswag
    luckyswag
    Sep 27, 2018
    505
    为拉低中奖率不折手段 3️⃣
    solomensec
    solomensec
    Sep 27, 2018 via iPhone
    506
    正想买这种类型的书呢?就看 v 友有看过的吗
    solomensec
    solomensec
    Sep 27, 2018 via iPhone
    507
    再来一波,拉低中奖率
    CloudnuY
    CloudnuY
    Sep 27, 2018
    508
    瞎学点试试
    AntonChen
    AntonChen
    Sep 27, 2018 via Android
    509
    分母,顺便说一句,爬虫书也可以称之为《从入门到入狱》了。
    jerny
    jerny
    Sep 27, 2018
    510
    Python 爬虫开发 从入门到实战
    bonfy
    bonfy
    Sep 27, 2018
    511
    分母吧 反正没中过奖
    bonfy
    bonfy
    Sep 27, 2018
    512
    @AntonChen 有道理啊
    art2cat
    art2cat
    Sep 27, 2018
    513
    分母+1
    mosliu
    mosliu
    Sep 27, 2018
    514
    拉低中奖率
    vast0906
    vast0906
    Sep 27, 2018
    515
    想做分子~~~
    Heier
    Heier
    Sep 27, 2018 via Android
    516
    支持支持!
    likuku
    likuku
    Sep 27, 2018
    517
    说不定就中一本了呢...
    ce233
    ce233
    Sep 27, 2018
    518
    看到你们这么热情,我一句话不说也不好。
    imsuxp
    imsuxp
    Sep 27, 2018
    519
    好吧,我也来做分母。
    reticentfat
    reticentfat
    Sep 27, 2018
    520
    分母+1
    mingyun
    mingyun
    Sep 27, 2018
    521
    这抽奖算法厉害了
    itskingname
    itskingname
    OP
    Sep 27, 2018
    522
    这篇文章说讲到的内容,不及书中内容之万一。希望搭建都能以这本书为一个起点,找到自己的方向。
    smallseven
    smallseven
    Sep 27, 2018
    523
    软文很有趣,抽奖方式很厉害,就看书了,抽中!
    ylcx123
    ylcx123
    Sep 27, 2018
    524
    分母+1
    lokya
    lokya
    Sep 27, 2018
    525
    坐等开奖
    csy123
    csy123
    Sep 27, 2018 via iPhone
    526
    占个楼
    wlh233
    wlh233
    Sep 27, 2018
    527
    哇又有抽奖了
    Vzx01
    Vzx01
    Sep 27, 2018
    528
    分母+1
    punk2sang
    punk2sang
    Sep 27, 2018 via iPhone
    529
    占楼
    isnowify
    isnowify
    Sep 27, 2018 via Android
    530
    分母
    Mark24
    Mark24
    Sep 27, 2018
    531
    拉低中奖率
    sosloop
    sosloop
    Sep 27, 2018 via Android
    532
    占楼抽奖,啦啦啦
    NLL
    NLL
    Sep 27, 2018 via iPhone
    533
    分母分母
    axxbin
    axxbin
    Sep 27, 2018 via Android
    534
    支持
    saturnisbig
    saturnisbig
    Sep 28, 2018
    535
    支持
    doctorwei
    doctorwei
    Sep 28, 2018 via iPhone
    536
    做个虫师
    suyeH
    suyeH
    Sep 28, 2018
    537
    兹磁
    twoyuan
    twoyuan
    Sep 28, 2018
    538
    有意思的软文。试试运气
    Crayon2022
    Crayon2022
    Sep 28, 2018 via Android
    539
    占楼,支持
    ipuhua
    ipuhua
    Sep 28, 2018 via iPhone
    540
    这种叙述风格我喜欢!
    fuergaosi
    fuergaosi
    Sep 28, 2018 via Android
    541
    分母
    zktz
    zktz
    Sep 28, 2018
    542
    顺丰包邮!
    vvqqdd
    vvqqdd
    Sep 28, 2018
    543
    wo lai kan kan
    davin
    davin
    Sep 28, 2018
    544
    看看能中不
    chempotato
    chempotato
    Sep 28, 2018 via Android
    545
    好的
    wugiro
    wugiro
    Sep 28, 2018
    546
    当个分母
    HFX3389
    HFX3389
    Sep 28, 2018
    547
    坐等开奖
    xinpure
    xinpure
    Sep 28, 2018 via iPhone
    548
    拉低中奖率
    FRankie222
    FRankie222
    Sep 28, 2018 via iPhone
    549
    抽奖方式有意思
    iEuhgod
    iEuhgod
    Sep 28, 2018
    550
    厉害。还有奖品!
    jasonsui
    jasonsui
    Sep 28, 2018 via Android
    551
    占楼
    ifconfig
    ifconfig
    Sep 28, 2018
    552
    好书,谢谢分享
    iloxmn
    iloxmn
    Sep 28, 2018 via Android
    553
    分母
    jmy
    jmy
    Sep 28, 2018
    554
    这个书名跟另外一本 Python 书一样吗?
    lil460982475
    lil460982475
    Sep 28, 2018
    555
    有点意思
    crisrock
    crisrock
    Sep 28, 2018
    556
    分母
    MoliOOO
    MoliOOO
    Sep 28, 2018
    557
    不错,喜欢这种文风
    newbieRenew
    newbieRenew
    Sep 28, 2018
    558
    这么多人来了,我也参加一下。
    qinghon
    qinghon
    Sep 28, 2018 via Android
    559
    占楼,想做分子:)
    Dandy200
    Dandy200
    Sep 28, 2018
    560
    好书,支持一波
    leeyom
    leeyom
    Sep 28, 2018
    561
    拉低中奖率
    XXneet
    XXneet
    Sep 28, 2018
    562
    万一没中呢
    sixm
    sixm
    Sep 28, 2018
    563
    日常分母
    KingPL
    KingPL
    Sep 28, 2018
    564
    日常分母
    achenme
    achenme
    Sep 28, 2018
    565
    我是一个可爱的小分母
    Dowding
    Dowding
    Sep 28, 2018
    566
    分母+1
    cokepro
    cokepro
    Sep 28, 2018
    567
    支持!
    cont
    cont
    Sep 28, 2018
    568
    故事写得不错
    imianhuatang
    imianhuatang
    Sep 28, 2018
    569
    来一次小幸运吧
    fine
    fine
    Sep 28, 2018
    570
    分母+1
    Jirry
    Jirry
    Sep 28, 2018
    571
    有意思

    分母
    mouse0809
    mouse0809
    Sep 28, 2018
    572
    分母+1
    MzM2ODkx
    MzM2ODkx
    Sep 28, 2018
    573
    分母+1
    itskingname
    itskingname
    OP
    Sep 28, 2018
    574
    分母还不够啊。。
    cptike
    cptike
    Sep 28, 2018
    575
    又到了测试运气的时候
    itskingname
    itskingname
    OP
    Sep 28, 2018
    576
    我发现有一些 V 友,他的回复记录里面全是免费送东西的帖子下面的回答。
    cosmo
    cosmo
    Sep 28, 2018 via Android
    577
    试试
    lmxb
    lmxb
    Sep 28, 2018 via Android
    578
    分母+1
    lmxb
    lmxb
    Sep 28, 2018 via Android
    579
    希望我的运气会爆棚
    int11
    int11
    Sep 28, 2018
    580
    Python 爬虫开发 从入门到送书
    itskingname
    itskingname
    OP
    Sep 28, 2018
    581
    @int11 送送送
    screwr
    screwr
    Sep 28, 2018
    582
    占楼
    470326964
    470326964
    Sep 28, 2018
    583
    Python 爬虫开发 从入门到送书
    gtlions
    gtlions
    Sep 28, 2018 via iPhone
    584
    必须来一波
    gooood
    gooood
    Sep 28, 2018 via Android
    585
    可真的是厉害了
    wangshichang
    wangshichang
    Sep 28, 2018
    586
    厉害!分母+1
    valsdc
    valsdc
    Sep 28, 2018
    587
    说的这个故事很有意思啊
    chenyfc
    chenyfc
    Sep 28, 2018
    588
    分母
    itskingname
    itskingname
    OP
    Sep 28, 2018
    589
    @valsdc 我还有更多的故事。
    itskingname
    itskingname
    OP
    Sep 28, 2018
    590
    各位,明天早上抽奖。大家注意。
    Kirscheis
    Kirscheis
    Sep 28, 2018
    591
    590 回复 [斜眼] 那岂不是还有 1%的机会,可以搏一搏
    roronoaws
    roronoaws
    Sep 28, 2018 via Android
    592
    分母加一
    kraymond
    kraymond
    Sep 28, 2018 via iPhone
    593
    分母🐶
    Dv
    Dv
    Sep 28, 2018
    594
    先膜拜
    Dv
    Dv
    Sep 28, 2018
    595
    再加分母
    WEAlex
    WEAlex
    Sep 28, 2018 via Android
    596
    分母+1。。。。
    470326964
    470326964
    Sep 28, 2018
    597
    为拉低中奖率不折手段 3️⃣
    dragonsky
    dragonsky
    Sep 29, 2018 via Android
    598
    分子?
    Hauserkk
    Hauserkk
    Sep 29, 2018
    599
    再当一次分子
    mouse0809
    mouse0809
    Sep 29, 2018
    600
    分子来了!
    1  2  3  4  5  6  7  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 268ms · UTC 20:14 · PVG 04:14 · LAX 12:14 · JFK 15:14
    ♥ Do have faith in what you're doing.