前导:做网络爬虫(Web crawler)是方便大量收集、跟踪数据的相当便捷的方法。笔者在过去一年内,做过上市项目信息收集,WHO官网致病数数据收集,京东商品信息收集,以及Bilibili视频信息收集,微信公众号历史文章抓包,各大媒体网站数据抓包,并尝试在服务器搭载爬虫。之前的项目中,全靠自己摸索如何掌握爬虫所需要的前置知识,并不断找到更快的爬虫方案,现汇成一个新手指引分享给大家,希望对想自学/提高生产力的同学们有帮助。如果有不妥当的地方,欢迎大家在评论区指正~
目录:
全文7538字,可以先存着,学习过程中慢慢看。本文欢迎转载,转载请标明原文出处。
自学流程简述
所需自学的爬虫语言(按顺序):
- Python/Java (基础语言,python对新手很友好,但学过C++的同学直接上手Java就好了)
- HTML (通过脚本,能找到所要爬取内容对应的Element)
- CSS (通过Style sheet,找到Element的路径)
- JavaScript (了解网页与服务器交互原理,从而绕过前端(HTML),找到对应服务器,直接提取数据)
- JQuery (对JavaScript进行补充,了解前后端如何进行数据交互)
- PHP (了解后端的运作方式,但不是必备知识)
所需自学的外置库
- urllib3库 (以爬虫(crawler)本身身份向服务器发请求,现在会被服务器直接封杀)
- Python Requests库 (伪装成浏览器向服务器发请求,得到html代码,最为常用)
- 抓包+API爬虫 (用requests,只不过在抓包分析了服务器数据来源网址,直接访问储存的数据,比爬html网页前端快多了)
- Scrapy库(是一个完整的爬虫构架,有访问,有缓存,有并发。如果说requests+bs4是散装零件,scrapy就是整机,更容易上手,但灵活性也降低了)
- Python BeasutifulSoup4(bs4)库 (解析爬取下来的网页html代码,从而找到对应元素)
- Python Selenium库 (用机器人完全模仿浏览器,直接打开搜索引擎,模仿用户操作爬取内容,最慢的爬虫,但基本不会被封杀) (其自带的html解析方法不逊于bs4); PhantomJS跟selenium一样,只不过无界面,节省内存。
所需自学数据储存流程:
- txt/csv读写
- Python openpyxl (Excel读写)
- json (在后期API调用数据时能直接将发来的json转化为dictionary)
- sql/mangoDB读写 (数据库读写,方便将爬虫搬运到服务器上运行)
自学流程简述
为了写爬虫,所学这些语言的目的如下:
-Python/Java
笔者目前只接触了C++和Python两个基础语言,Python相对来说容易上手,对运行时间和内存分配没有编程要求,而且安装的库也丰富而且容易上手,所以之前的案例我都是用Python完成的,基本学完了函数就能解决爬虫问题。此外,Java也支持很多外置库,而且跟前后端语言结合度更好,也很推荐使用。
-HTML
HTML是爬虫的入门语言,想要爬取网页上的数据,就得能读得懂网页代码内容,你不学HTML就没法明白爬虫!
一般都是ctrl+shift+C (windows)或者command+shift+C(Mac)来查看网页源代码,然后找到所要爬取的元素的路径,建议使用Chrome浏览器debug console。这个路径下的元素就可以被bs4库解析后找出来,元素内的文字部分或本身者链接部分就可以被转换为字符串了,可以保存在本地。
也有不少网页的数据储存在不同结构里,比如表格、下拉条、选项框内,因此就要懂得找不同的元素,通过学习HTML即可。对于动态元素,比如下拉刷新页面了之后才能呈现的,这我就放到Selenium部分讲解。对于"Get"服务器直接就能返回的HTML代码,requests库就能爬取下来。
-CSS
会了HTML就已经成功一大半了,找元素自然可以根据元素种类和名称来找。但有些元素的html路径并不是固定的,而可能随着页面尺寸改变而改变,这就需要CSS/Xpath来找元素。
在下面这个图里面,copy的路径可以是html(外部html和内部html), Xpath(相对路径),以及selector path(通过css筛选器选取元素)。学习HTML可以方便你了解元素作为文本,是如何存的。 学习CSS可以方便你了解元素的呈现格式(位置,大小,颜色)是怎么样的,从而能更准确的找到元素。CSS会让你的代码更灵活。
我之前在做京东商品信息爬虫时,就遇到翻页按钮被透明图片遮罩(程序员在耍小聪明啊),于是selenium就傻乎乎的点了透明按钮,然后就给封禁了。所以CSS selector也可能没有用,这个时候就要考虑xp