个人理解的Python爬虫流程(通俗版--案例NASDAQ)-by Monkey

个人理解的Python爬虫流程(通俗版--案例NASDAQ)

目录:

1. 准备阶段:python安装,相关packages安装。

2. 先拿一个目标做测试、编程研究。

3. 组装整体框架。

4. 结果输出。

5. 优化"算法"。

*6. 应对“反爬虫”技术。

1.  准备阶段:python安装,相关packages安装。

(1) python安装:Python安装大部分帖子都有涉及到,但是选择好的语言环境更方便于日后的工作。个人更加喜欢Anaconda。主流的IDE有PyCharm, VScode, Jupyter等,笔者用的是Jupyter和VScode, 感觉Jupyter做测试、实验,vscode来做project。

(2) packages:一般来讲需要的packages有: urllib3, BeautifulSoup, selenium等,如果需要加工results,可能会需要Pandas, Numpy等。如果需要解析特殊的WEB 可能会用到json,cookiejar等,具体问题具体分析。 

    A. 如果你是用anaconda, 安装packages很方便,在environment里右上交搜索相应的packgae,应用安装即可。(如图1-1)

图1-1:

之后在jupyter中引用的时候,直接import即可(如图1-2):

图1-2:


     B. 如果你是选择vs code,需要用pip install命令,但是先要调配好pip。如果是linux系统,就更加方便了,笔者是linux系统+vscode,  直接用conda 语言环境,activate即可。

2. 先拿一个目标做测试、编程研究.

写一整个爬虫程序会很复杂,所以要事先明确目标。每个web的框架,编写逻辑都不一样,甚至同时需要翻到很多个href去运行。所以我会习惯先拿一个目标做做样子~

下面以NASDAQ的web为例,我们来看如何预先“做样子”:

图2-1:

见图2-1,我们想要摘取这家公司的所有相关信息,比如CIK,share price, symbol, 地址,电话等,这些就是尝试。最后我们可能要爬去成百上千家公司的同样信息,每家公司的web框架一样,那么只要做出一家基本上就可以以此类推。

第一步,我们要做的就是将这个web转化成机器可以读懂的代码形式,我们需要运用urllib和beautifulsoup。(如图2-2)基本思路是定义url地址,发出request,打开网页,解码,beautifulsoup,最后print。

图2-2:


图2-3:


看一下这个网站的代码,还是很规矩的(后面我们会降到不规则的web代码),每一个span, td 对应每一层,爬虫的根本方法在于,定位你所需要的内容,然后获取信息。get_text(). 所以我们在应用爬虫之前,最好懂得一些html, javascript, css,vue.js, json等基础的前端语言,SQL PHP等服务端语言可能用到的不多。

接着刚才的讲,(a)因为我们要抓取很多个web,所以输出时候最好建一个list来存储,尤其在def的时候尤为重要。(b)如果抓取的信息不规矩,我们还要通过正则来清洗。如图2-4。

图2-4:


3. 组装整体框架。

现在我们开始做整体考虑,我们的目标是要抓取2010年到2018年所有上市公司的信息,那么需要get到很多的href.

图3-1:


9

这个网址为https://www.nasdaq.com/markets/ipos/activity.aspx?tab=pricings&month=2018-12,如图3-1, 我们要获取每一个公司的信息。我们发现有几个特点,(a) url末尾2018-12标明的是IPO日期,那么我们想要获取2010年到2018年的IPO信息,只要创建一个日期自动变换的list即可。(b) 找到如何跳转网页的方法。

图3-2:


我们创建好日期更换的list,直接引用到def就可以了。那么,如何找到网页跳转的方法呢。看图3-3,我们发现每一个<a href:"https://..........">??</a>都是跳转到你所点击的公司信息网址,那么我们只要get到那个网址就可以。具体代码参考图3-4。

图3-3:

图3-4:


最后还是建议多运用class和def,我最开始特别不习惯运用def 和class,后来发现,不得不用的时候,才会觉得面向对象的编程,会让思路逻辑更清晰。(图3-5)还有可以适当存档之前的输出结果,运用dic字典也可以更加方便。记住在loop里,脚本语言默认输出最后一个值,要想输出整体list,还是要选择合适的return。

图3-5:


4. 结果输出。

笔者最后选择输出csv格式,但是很多人也可以直接在python里运用numpy, pandas去做运算加工。也可以链接数据库,具体才考大神的笔录。读取/存储csv有几个常用方法,如图4-1:

图4-1:

读取:

存储:


利用pandas:


5. 清理数据,优化"算法"。

清理数据,优化算法很重要,往往更精准,更省时间。笔者一开始写的要花费要几个小时去run,尽量减少Loop和不必要的定义就好。其次要选择机器计算最省事的方法。图5-1:消除index error, value error, 去掉空值,去掉没用的符号和空字符串,不会导致自己白等那么多时间结果出现error,笔者之前很懒,不愿意去考虑这些,总会导致重复工作。

图5-1:


优化算法这点,我很垃圾,以前听过大神讲,我写的东西废话太多,所以我理解吧,少说些废话,尽量一步到位,当然有些必要的还是要保留。举个例子,比如说我们找出2到1,000,000所有的质数。我要写就会从2开始试,能被1和自身整除就存在List里。但是这样机器就像小孩子一样一直来回来去数数。

*6. 应对“反爬虫”技术。

现在很多web会发爬虫,常见的方法比如检测你访问频率,然后拉黑你的ip,这个时候我们要找很多IP Proxy然后randomly的选则使用,如图*6-1,这些可以查找免费的。

图*6-1:


然后我们最好加header,模拟浏览器访问。如图*6-2。


然后有一些比如手动滑验证码的,可以考虑实用selenium模拟movement。有些网站会自动替换字符串,比如你看到1438可能你转换成代码就变成1348,那么我们需要从新定义字符串。有些可能会需要图片解析,因为你看到的数字可能是图片,解析图片可能需要PIL。有些会获取返还你的一个时间段cookie,那么记得清除。哦对了。。。记得设time.sleep()  不然太高频率会被疑似DOS攻击,笔者之前就因此被拉黑过.....

感言:


路漫漫其"修"远兮,有些东西还是在实践中不断学习,那些专门做这个工作的人真的懂的太多,欢迎大神指正错误,互相学习,一起进步!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容