Web Crawler 教程之初识网络爬虫

网络爬虫(又称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动浏览、抓取万维网上信息的程序或者脚本。爬虫能够自动请求网页,并解析网页结构和内容,以提取我们期望的有价值信息完成存储。

认识爬虫

通俗的来讲,假如你需要互联网上某网站(电影站点)中的信息,如片名、演员、电影描述信息、下载链接等,但你又不想或者不能打开网页一个个去收集,这时你可以通过编写爬虫脚本,让爬虫按照你定义的规则自动地去网站上收集你需要的信息。

事实上,我们所熟知的一系列 搜索引擎 都是 大型的 网络爬虫,例如:百度(Baidu)、谷歌(Google)、搜狗(Sogou)等等。其中,每个搜索引擎都拥有自己的爬虫程序,比如:谷歌的爬虫也称为 GoogleSpider,搜狗的爬虫也叫 SogouSpider。

百度搜索引擎(BaiduSpider) >>>>

BaiduSpider 每天都会在海量的互联网信息中爬取优质的信息,并进行收录。

当用户通过百度检索关键词时,百度首先会对用户输入的关键词进行分析,然后从收录的网页中找出相关的网页,并按照排名规则对网页进行排序,最后将排序后的结果呈现给用户。

数据分析 && 深度学习 >>>>

在数据分析以及深度学习领域,网络爬虫通常是 搜集海量数据的必备工具

对于数据分析师或深度学习工程师而言,要进行数据分析或深度学习模型训练,首先要有数据源,而学习爬虫,就可以获取更多的数据源。

在数据采集过程中,可以按照自己的目的去采集有价值的数据,过滤掉那些无效的数据。


爬虫是否合法?

网络爬虫在带给我们便利的同时,也给网络安全带来了一定的隐患,所以很多小伙伴都会产生这个疑问。

事实上,爬虫只是一门技术,技术应该是中立的,合不合法本质上取决于使用的目的,由爬虫背后的使用者来决定。

一般来说,只要不干违法(非法搜集网民信息)的事情,不影响网站的正常运转,也不是出于商业目的,一般也就只会封下的 IP,账号之类的,不至于法律风险!!!

其实,为了限制爬虫带来的危险,大多数网站都有良好的 反爬措施(封 IP、账户…),并且通过网站的 robots 协议 做了进一步的说明。

大多数网站的根目录下会有个 robots.txt 的文件,里面写明了网站里面哪些内容可以抓取,哪些不允许。以淘宝网 robots.txt 的内容为例:

1
2
3
4
5
6
7
8
9
User-agent: Baiduspider 
Disallow: /baidu Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
.....
User-agent: *
Disallow: /

robots 协议是一个业内约定,并不具备法律效力,它体现了互联网人的“契约精神”,是一种 “君子协议”。


爬虫类型

爬虫可分为三大类:

[1] >>> 通用网络爬虫

通用网络爬虫,是搜索引擎的重要组成部分,见上面【百度搜索引擎(BaiduSpider)】中说明。

[2] >>> 聚焦网络爬虫

聚焦网络爬虫,是一种面向特定需求的网络爬虫程序。

与通用爬虫的区别在于:聚焦爬虫在实施网页抓取的时候会对网页内容进行筛选和处理,尽量保证只抓取与需求相关的网页信息。

可以极大地节省了硬件和网络资源,由于保存的页面数量少所以更新速度很快,这也很好地满足一些特定人群对特定领域信息的需求。

[3] >>> 增量式网络爬虫

增量式网络爬虫,是指对已下载网页采取增量式更新。它是一种只爬取新产生的或者已经发生变化网页的爬虫程序,能够在一定程度上保证所爬取的页面是最新的页面。


Why Python?

除 Python 语言外,其他语言,诸如 PHP、Java、C/C++ 都可以用来写爬虫程序,且一般来说执行效率还要比 Python 要高。

为什么很多人提到爬虫就会想到 Python ???优势如下:

  • 开发效率高:语法简单、代码简洁,学习成本较低;
  • 爬虫对于代码执行效率要求不高:网站 IO 才是最影响爬虫效率的,如一个网页请求可能需要 100ms,数据处理 10ms 还是 1ms 影响不大;
  • 丰富的类库支持:支持多个优秀的爬虫相关类库,如:urllib、Requests、Bs4、Selenium 等。

准备工作

在开始正式的网络爬虫编写之气,你需要完成一些准备工作,以帮助你快速入门:

知识储备

[1] >>> Python 语言基础

Python 网络爬虫,是 Python 编程的进阶知识,你必须具备一定的 Python 编程基础,以帮助你实现网络爬虫快速入门。

同时,你需要了解 Python 语言的多进程与多线程,并熟悉正则表达式语法,有助于你编写高效的网络爬虫程序。

[2] >>> WEB 前端

编写网络爬虫的一个重要步骤就是,分析网页结构以及元素节点内容。

了解 Web 前端的基本知识,如 HTML && CSS && JavaScript,能够帮助你分析网页结构,提炼出有效信息。

[3] >>> HTTP 协议

掌握 OSI 七层网络模型,了解 TCP/IP 协议、HTTP 协议,将帮助你了解网络请求(GET 请求、POST 请求)和网络传输的基本原理。


环境准备

编写 Python 爬虫程序前,需要准备相应的开发环境:Python3.5 环境以上 && IDE(VS Code/Sublime Text/Pycharm…)


通用爬虫流程

不同于其它脚本程序,爬虫脚本的编写思维逻辑一般都是相似的,所以一般无需在逻辑方面花费大量的时间。

编写爬虫脚本的通用流程如下:

  1. 通过 Python 网络模块(urllib/requests)发送 URL 请求以获取网页的 HTML 对象;
  2. 通过浏览器并借助网页元素审查工具分析网页结构以及元素节点信息;
  3. 根据网页结构以及元素节点信息,借助 HTML 对象解析工具(Regular Expression/Xpath/Beautiful Soup 4)以解析页面提取有效数据;
  4. 将提取到的有效数据持久化到本地磁盘(文件)或数据库。

爬虫脚本的目的,就是 尽量伪装成人访问网站的样子 以提取有效信息,而非机器访问,否则就会被网站的反爬策略限制,甚至直接封杀 IP 或账户。


Author

Waldeinsamkeit

Posted on

2020-01-20

Updated on

2022-12-30

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.