社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

CS基础:我是如何零基础开始能写Python爬虫的

软件定义世界(SDX) • 6 年前 • 739 次点击  

热门下载(点击标题即可阅读)

☞【PPT下载】中国数据分析师行业峰会精彩PPT下载(共计21个文件)

刚开始接触爬虫的时候,简直惊为天人,十几行代码,就可以将无数网页的信息全部获取下来,自动选取网页元素,自动整理成结构化的文件。


利用这些数据,可以做很多领域的分析、市场调研,获得很多有价值的信息。这种技能不为我所用实在可惜,于是果断开始学习。


1

并非开始都是最容易的

刚开始对爬虫不是很了解,又没有任何的计算机、编程基础,确实有点懵逼。从哪里开始,哪些是最开始应该学的,哪些应该等到有一定基础之后再学,也没个清晰的概念。


因为是 Python 爬虫嘛,Python 就是必备的咯,那先从 Python 开始吧。于是看了一些教程和书籍,了解基本的数据结构,然后是列表、字典、元组,各种函数和控制语句(条件语句、循环语句)


学了一段时间,才发现自己还没接触到真正的爬虫呢,而且纯理论学习很快就忘了,回去复习又太浪费时间,简直不要太绝望。把 Python 的基础知识过了一遍之后,我竟然还没装一个可以敲代码的IDE,想想就哭笑不得。



2

开始直接上手

转机出现在看过一篇爬虫的技术文章后,清晰的思路和通俗易懂的语言让我觉得,这才是我想学的爬虫。于是决定先配一个环境,试试看爬虫到底是怎么玩的。(当然你可以理解为这是浮躁,但确实每个小白都想去做直观、有反馈的事情)


因为怕出错,装了比较保险的 Anaconda,用自带的 Jupyter Notebook 作为IDE来写代码。看到很多人说因为配置环境出各种BUG,简直庆幸。很多时候打败你的,并不是事情本身,说的就是爬虫配置环境这事儿。


遇到的另一个问题是,Python 的爬虫可以用很多包或者框架来实现,应该选哪一种呢?我的原则就是是简单好用,写的代码少,对于一个小白来说,性能、效率什么的,统统被我 pass 了。于是开始接触 urllib、美丽汤(BeautifulSoup),因为听别人说很简单。


我上手的第一个案例是爬取豆瓣的电影,无数人都推荐把豆瓣作为新手上路的实例,因为页面简单且反爬虫不严。照着一些爬取豆瓣电影的入门级例子开始看,从这些例子里面,了解了一点点爬虫的基本原理:下载页面、解析页面、定位并抽取数据。


当然并没有去系统看 urllib 和 BeautifulSoup 了,我需要把眼前实例中的问题解决,比如下载、解析页面,基本都是固定的语句,直接用就行,我就先不去学习原理了。


↑  用 urllib 下载和解析页面的固定句式


当然 BeautifulSoup 中的基本方法是不能忽略的,但也无非是 find、get_text() 之类,信息量很小。就这样,通过别人的思路和自己查找美丽汤的用法,完成了豆瓣电影的基本信息爬取。


↑  用 BeautifulSoup 爬取豆瓣电影详情



3

爬虫渐入佳境

有了一些套路和形式,就会有目标,可以接着往下学了。还是豆瓣,自己去摸索爬取更多的信息,爬取多部电影,多个页面。这个时候就发现基础不足了,比如爬取多个元素、翻页、处理多种情况等涉及的语句控制,又比如提取内容时涉及到的字符串、列表、字典的处理,还远远不够。


再回去补充 Python 的基础知识,就很有针对性,而且能马上能用于解决问题,也就理解得更深刻。这样直到把豆瓣的TOP250图书和电影爬下来,基本算是了解了一个爬虫的基本过程了。


BeautifulSoup 还算不错,但需要花一些时间去了解一些网页的基本知识,否则一些元素的定位和选取还是会头疼。


后来认识到 xpath 之后相见恨晚,这才是入门必备利器啊,直接Chrome复制就可以了,指哪打哪。即便是要自己写 xpath,以w3school上几页的 xpath 教程,一个小时也可以搞定了。requests 貌似也比 urllib 更好用,但摸索总归是试错的过程,试错成本就是时间。


↑ requests+xpath 爬取豆瓣TOP250图书信息



4

跟反爬虫杠上了

通过 requests+xpath,我可以去爬取很多网站网站了,后来自己练习了小猪的租房信息和当当的图书数据。爬拉勾的时候就发现问题了,首先是自己的请求根本不会返回信息,原来要将自己的爬虫伪装成浏览器,终于知道别人代码中那一坨 headers 信息是干啥的了😂。


↑  在爬虫中添加 headers 信息,伪装成真实用户


接着是各种定位不到元素,然后知道了这是异步加载,数据根本不在网页源代码中,需要通过抓包来获取网页信息。于是在各种 JS、XHR的文件中 preview,寻找包含数据的链接。


当然知乎还好,本身加载的文件不多,找到了 json 文件直接获取对应的数据。(这里要安利一个chrome插件:jsonview,让小白轻松看懂 json 文件)


↑  浏览器抓取 JavaScript 加载的数据


在这里就对反爬虫有了认识,当然这还是最基本的,更严格的IP限制、验证码、文字加密等等,可能还会遇到很多难题。但是目前的问题能够解决不就很好了吗,逐个击破才能更高效地学习。


比如后来在爬其他网站的时候就被封了IP,简单的可以通过 time.sleep() 控制爬取频率的方法解决,限制比较严格或者需要保证爬取速度,就要用代理IP来解决。


当然,后来也试了一下 Selenium,这个就真的是按照真实的用户浏览行为(点击、搜索、翻页)来实现爬虫,所以对于那些反爬虫特别厉害的网站,又没有办法解决,Selenium 是一个超级好用的东东,虽然速度稍微慢点


5

尝试强大的 Scrapy 框架

有了 requests+xpath 和抓包大法,就可以做很多事情了,豆瓣各分类下的电影,58同城、知乎、拉勾这些网站基本都没问题。不过,当爬取的数据量级很大,而且需要灵活地处理各个模块的话,会显得很力不从心。


于是了解到强大的 Scrapy 框架,它不仅能便捷地构建 Request,还有强大的 Selector 能够方便地解析 Response,然而最让人惊喜的还是它超高的性能,可以将爬虫工程化、模块化。


↑  Scrapy 框架的基本组件


学会 Scrapy,自己去尝试搭建了简单的爬虫框架,在做大规模数据爬去的时候能够结构化、工程化地思考大规模的爬取问题,这使我可以从爬虫工程的维度去思考问题。


当然 Scrapy 本身的 selector 、中间件、spider 等会比较难理解,还是建议结合具体的例子,参考别人的代码,去理解其中实现的过程,这样能够更好地理解。


↑  用 Scrapy 爬取了大量租房信息



6

本地文件搞不动了,上数据库

爬回来大量的数据之后就发现,本地的文件存起来非常不方便,即便存下来了,打开大文件电脑会卡得很严重。怎么办呢?果断上数据库啊,于是开始入坑 MongoDB。结构化、非结构化的数据都能够存储,安装好 PyMongo,就可以方便地在 Python 中操作数据库了。


MongoDB 本身安装会比较麻烦,如果自己一个人去折腾,很有可能会陷入困境。刚开始安装的时候也是出现各种BUG,幸得大神小X指点,解决了很多问题。


当然对于爬虫这一块,并不需要多么高深的数据库技术,主要是数据的入库和提取,顺带掌握了基本的插入、删除等操作。总之,能够满足高效地提取爬下来的数据就OK了。


↑  爬取拉勾招聘数据并用 MongoDB 存储


7

传说中的分布式爬虫

这个时候,基本上很大一部分的网页都能爬了,瓶颈就集中到爬取大规模数据的效率。因为学了 Scrapy,于是自然地接触到一个很厉害的名字:分布式爬虫。


分布式这个东西,一听不明觉厉,感觉很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,除了前面学过的 Scrapy 和 MongoDB,好像还需要了解 Redis。


Scrapy 用于做基本的页面爬取,MongoDB 用于存储爬取的数据,Redis 则用来存储要爬取的网页队列,也就是任务队列。


分布式这东西看起来很吓人,但其实分解开来,循序渐进地学习,也不过如此。


↑  分布式爬58同城:定义项目内容部分


零基础学习爬虫,坑确实比较多,总结如下:

  1. 环境配置,各种安装包、环境变量,对小白太不友好;

  2. 缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃;

  3. Python有很多包、框架可以选择,但小白不知道哪个更友好;

  4. 遇到问题甚至不知道如何描述,更不用说去寻找解决办法;

  5. 网上的资料非常零散,而且对小白不友好,很多看起来云里雾里;

  6. 有些东西看似懂了,但结果自己写代码还是很困难;


所以跟我一样,很多人爬坑最大的体会是:尽量不要系统地去啃一些东西,找一个实际的项目(从豆瓣这种简单的入手),直接开始就好。


因为爬虫这种技术,既不需要你系统地精通一门语言,也不需要多么高深的数据库技术,从实际的项目中去学习这些零散的知识点,你能保证每次学到的都是最需要的那部分。


当然麻烦的是,在具体的问题中, 如何找到具体需要的那部分学习资源、如何筛选和甄别,遇到困难时如何有效解决,是很多初学者面临的大问题。

读BD最佳实践案例,赢DT未来!

18各行业,106个中国大数据应用最佳实践案例:

(1)《赢在大数据:中国大数据发展蓝皮书》;
免费试读:https://item.jd.com/12058569.html

(2)《赢在大数据:金融/电信/媒体/医疗/旅游/数据市场行业大数据应用典型案例》;

免费试读:https://item.jd.com/12160046.html

(3)《赢在大数据:营销/房地产/汽车/交通/体育/环境行业大数据应用典型案例》;

费试读:https://item.jd.com/12160064.html

(4)《赢在大数据:政府/工业/农业/安全/教育/人才行业大数据应用典型案例》。

免费试读:https://item.jd.com/12058567.html

或点击“阅读原文”,购买“赢在大数据系列丛书”。

推荐文章


点击蓝色标题即可阅读全文

10万读者睿选2016年TOP1002015年TOP100

BDAI100:大数据AI产业创新与投资百人会(BDAI100),致力推动1000家亿元BDAI企业涌现、推动BDAI与100万亿实体经济的深度融合、加速10万亿数据经济腾飞(简称“BDAI100十百千工程”)

CCTV大数据名人讲堂PPT&视频:万亿元大数据产业安全 城市】【农业航运】【数据资产变现

DTiii:2233家大数据产业地图PPT及下载】【TOP100】【亿元俱乐部】【2233家详单

数据中台:凯哥八问颠覆数据工程师

院士:李国杰【(PPT)(全文)】【数据开放】,邬贺铨倪光南【大数据时代 )()】,怀进鹏梅宏

大数据100分:【金融】【制造】【餐饮】【电信】【电商】【更多行业大数据应用请点击底部导航栏BD100分】;

大数据/人工智能数据竞赛:Kaggle经验分享NetFlix百万美金】【Kaggle案例】【2017BDCI】【2017BDCI嘉年华2018BDCI嘉年华滴滴算法大赛】

征信:ZestFinance】【BCG】【芝麻信用】;

工业4.0:罗兰·贝格】【安筱鹏

人工智能: 阿里&BCG】【埃森哲经济社会】【美国AI国家战略伯努利李开复】【TOP100】【2016中国AI报告】【美国AI国家规划】【深度学习】【人智合一】【人脸识别】【人脸识别企业PK】【无人驾驶】【AI知识体系】【神经网络

区块链:TED视频】【麦肯锡】【毕马威】【高盛

算   法: 【10大经典算法】【推荐算法

数据科学家:13个真实场景数据科学应用案例数据科学家工具包,数据科学家成指南让统计"看得见"21个面试题和答案

可视化:【2017年获奖2014年最佳】【十大标志性作品】【43款工具

PPT:【大数据产业地图】【数据之巅互联网的未来】【软件正吃掉整个世界】【互联网思维】【互联网+】【一带一路】;

VC:【独角兽研究报告】【大数据投资 2015创投趋势2014投资报告倒闭教训

人才:2018BD&人才报告2017BD&人才报告

大数据应用最佳实践案例:18个行业106个案例

原创:陈新河:万亿元大数据产业新生态软件定义世界,数据驱动未来数据交易互联网+观点】。

专题版本:20190408V3.52

底部新增导航菜单(点击顶部“软件定义世界(SDX)”,点击“进入公众号”,底部菜单栏即出现),下载200多个精彩PPT,持续更新中!

上下滑动查看更多精选专题

微信公众号:软件定义世界(SDX)

微信ID:SDx-SoftwareDefinedx

软件定义世界, 数据驱动未来;

❷ 大数据思想的策源地、产业变革的指南针、创业者和VC的桥梁、政府和企业家的智库、从业者的加油站;

个人微信号:sdxtime,

邮箱:sdxtime@126.com;

=>> 长按右侧二维码关注。

底部新增导航菜单,下载200多个精彩PPT,持续更新中!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34733
 
739 次点击