这篇主要是写给那些“爬虫”技术门外汉看的科普文章。
我的爬虫技术并不如何高深,但是给大家提供一点科普知识,应该还是够用了。
最早的时候,我还不知道“爬虫”到底是啥,感觉神秘极了,最早在 gayhub 上搜索 spider、crawler,看到很多开源项目,看得我头都大了。
现在回过头再来看这段经历,如果当时能更好地理解“爬虫”的概念,也许也不用如此辛苦。
爬虫诞生的背景
让我们举个例子。
需求:我想跟踪每个月出了什么新书,并了解这些新书的详细信息,比如题材、评分、价格等等,找到我喜欢的并完成下单。
原始解决方案:首先我需要定一个日程,避免自己忘了;然后我每周或者每个月打开一个电商网站的首页,查看“新书”栏目,点进每一本书的介绍页,遇到感兴趣的就进行购买。
问题:非常多,我不一定能记得定期处理,更不一定能坚持定期处理,时间成本太高……
于是有一个聪明人就想:为什么不让计算机帮我干这个事情?所以爬虫就诞生了。
什么是爬虫?
爬虫就是一种程序,这种程序可以自动获取网络中信息,并进行处理
所以简单讲来,一个爬虫程序主要有三大任务:
- 能够进行网络请求
- 获取数据,并对数据进行结构化处理
- 将处理结果进行保存,甚至是展示
实际上所有搜索引擎都是通过爬虫的方式,来记录网站的,你通过百度 / 谷歌搜索到的结果,基本也是百度 / 谷歌自己的爬虫抓取的,这种爬虫通常会受到欢迎。
但是恶意爬虫会造成网站所有者流量的耗散、服务器压力激增、商业数据流失等诸多问题。
所以大部分网站都会针对性地指定一些策略来避免自己的网站的数据被爬虫抓取。
反爬虫程序应运而生,主要有两个思路:
- 识别爬虫请求,并让爬虫请求不成功
- 让爬虫获取到无效数据,或者无法处理获取到的数据
因此爬虫程序又多个第四个任务:
- 反-反爬虫
如何入门爬虫?
入门爬虫的过程,实际上就是了解这些知识的过程:
- 一种编程语言的基本语法,比如说 Python
- 网络请求的相关知识,例如基本的 socket、https、header、cookie、请求方法等概念
- html、css、js 的相关知识
- 能够通过 Chrome、Charles、WireShark 等工具,查看网页代码、网络请求情况
- 一些数据存储的知识,例如 CSV、json、数据库等
如果你没有学过 Python,下面的内容可能你会看不懂,最好先去看看 Python 的教程,这类教程有非常多。
我也把自己学习的过程做过记录,可供参考:Python 学习从入门到放弃(一)-Python 基础介绍
你的第一个爬虫
这个爬虫只有四行,实现了一个效果:获取本机的外网 IP。
from urllib import request # 用于发起网络请求的库
response = request.urlopen("https://api.ipify.org") # 任务一:发起网络请求
IP = response.read().decode('utf8') # 任务二:处理数据
print(IP) # 任务三:保存或展示数据
实际上这就是一个爬虫,但是在绝大多数场景下,问题没有这么简单,我们会分成几篇文章来详细说明。