【杂谈】爬虫基础与快速入门指南
1 前端网页基础
在介绍爬虫之前我们先介绍一下网页基础,理解前端网页有利于我们对后面爬虫的学习,它是爬虫的基础之一。
1.网页构成
通常来说网页由三部分组成,分别为 HTML、CSS 以及 Javascript。HTML 承担网页内容,CSS 负责对网页的排版美化,而 Javascript 则使得网页更加有交互性。接下来我们分别介绍这三个部分。
(1) HTML,即 HyperText Mark-up Language,中文名超文本标记语言。超文本指的是超链接,标记指的是标签,所以 HTML 文件由一个个标签所组成的。
(2) CSS 即层叠样式表,它用来定义如何显示控制 HTML 元素,像拼图一样对 HTML 标签进行拼图,得到美观,优雅的网页显示效果。
(3) JavaScript,上面介绍的 HTML 和 CSS 只能展现一种静态的信息,缺乏交互性。我们在网页中看到的诸如轮播图等动态效果,都是基于 Javascript 实现的。在前后端分离的开发中,Javascript 还会担任一部分的逻辑操作。它的出现使得用户与网页信息之间不再只是一种冷冰冰的浏览与显示关系,而是实现了一种实时、动态、交互的页面功能。
2.URL
爬虫最主要的处理对象就是 URL,通过对 URL 的解析互取所需要的内容,然后再做进一步的处理。其格式由3部分组成:
(1) 协议,它告诉浏览器如何处理将要打开的文件。如大家常见的 http、https。
(2) 存有该资源的主机的IP地址(有时也包括端口号)
(3) 路径,一般来说不同部分之间以斜线(/)分隔。
2 爬虫基础概述
在了解了网页的一些基础知识之后,我们来继续学习一下爬虫的基础概念,以及 python 爬虫的一些库。我会首先介绍 robots.txt 文档,即 robots 协议,让大家合理、合法的进行网络爬虫。然后我们介绍 Requests 库,它可以帮助我们自动爬取 HTML 页面、自动网络请求提交 。接下来我们针对爬取回来的页面介绍数据解析库,如 lxml、re、beautifulsoup,它们可以很好地帮助我们解析 html 数据,并帮助我们提取信息。
1.robots.txt
robots.txt 即 robots 协议,存在于几乎每个网站的根目录,用来告诉我们此网站哪些数据是可以通过爬虫获取的,哪些内容是不应该被爬虫获取的。对于没有设定 robots 协议的网站,我们可以通过爬虫获取没有口令加密的数据,也就是可以获取该网站的全部数据。如果网站有 robots.txt 文档,我们就要判断是否禁止访客获取数据。
2.数据爬取
Python 拥有很多优秀的开源库,针对爬虫,python2 有 urllib1、2,python3 有自带的 urllib库。接下来我们以 python3(以下默认为 python )为例,介绍 urllib。
(1) urllib 介绍
Python urllib库官方文档链接:
https://docs.python.org/3/library/urllib.html
在这个页面中我们可以选择对应的 python 版本进行 urllib 库的学习。
(2) urllib 基础用法
urllib 中包括了四个模块,request 模块可以用来实现网页请求和响应获取;parse 模块用来解析和处理 URL;error 包含了对 request 模块产生异常的异常处理;robotparse 用来解析页面的robots.txt 文件。
从上面的代码我们可以看到,urllib.request 模块提供了最基本的构造 HTTP 请求方法,可以模拟浏览器的一个请求发起过程。同时它还带有处理 authenticaton(授权验证),redirections(重定向), cookies(浏览器 Cookies)以及其它内容。该函数会返回HTTPResposne类型的对象,使用response.read() 就可以得到返回的网页内容,再使用decode(“utf-8”)解码字符串,就可以获取网页。同时,我们还使用了正则表达表达式来提取数据,以获得我们想要的信息。
3.数据解析
我们通过上面的学习,了解了如何使用 urllib 进行数据爬取。但只对数据进行爬取是不足够的,所以我们要学习使用数据解析库,对爬取的数据进行数据解析。数据解析方面的库有:beautifulsoup4、lxml、re 等。接下来我们以 BeautifulSoup 为例,来看一下数据解析过程:
3 爬虫框架
通过上面的基本爬虫的简单学习,我们发现使用原始的爬虫存在着低效率、代码量大的缺点,一般只能用作小型项目的爬虫。接下来我们会介绍一个爬虫框架,我们现在有了基础爬虫的知识,所以这个框架我们可以快速的上手,实现中等规模的爬虫。
1.Scrap 框架介绍
Scrapy 框架是一个专门由 python 开发的,用于快速、高层次的屏幕抓取和 web 抓取框架,用于抓取 web 站点并从页面中提取结构化的数据。Scrapy 框架可以用于数据挖掘、监测和自动化测试。它提供用户进行各种类型爬虫的编写,如我们前面提到的增量式网络爬虫等。
2. Scrapy 的安装
pip install scrapy
3. Scrapy 框架的基本使用
Scrapy 框架命令分为两种,一种是全局命令,另一种是项目命令。全局命令顾名思义,就是在哪里都可以去使用,项目命令是只有在爬虫项目中才可使用的命令。全局命令和项目命令可以在命令行窗口使用 scrapy -h 来查看。
在爬虫中,我们常用的命令有:
scrapy startproject # 创建一个爬虫项目
scrapy genspider # 在项目下创建一个爬虫 spider 类
scrapy runspider # 运行一个 spider 类文件
scrapy crawl # 通过名称指定爬取信息
scrapy shell # 使用命令行与 scrapy 交互
scrapy list # 查看当前项目下有多少个爬虫
4. Scrapy 使用实战
(1) 首先使用 scrapy startproject scarpy_demo 命令创建一个名为 scarpy_demo 爬虫项目.
目录结构说明:
(2) cd scarpy_demo 进入项目目录,使用 scrapy genspider demo www.baidu.com 创建一个 spider 类文件
(3) 进入 items.py 创建自己的 Item 容器类
引用这个 ScrapyDemoItem 类,在 spider/demo.py 开头加上
解析 respone 信息,并封装到 item中,再使用 Item Pipeline 管道对解析出来的 Item 数据进行清理、验证、去重、存储等操作。
开启 Item Pipeline 注释以及以 json 格式保存数据
scrapy crawl demo -o json
4 开源项目推荐
1. 图片爬虫
当我们开始一个新任务的时候,可以用搜索引擎爬小批量的数据。
GitHub 地址:https://github.com/sczhengyabin/Image-Downloader
特点:
(1) 图片种类丰富(所有类型)
(2) 爬取速度快(200张/分)
(3) 接口稳定且使用简单
但是爬取数量有限制,通常一个关键字不能超过2000张。
2. 视频爬虫
GitHub 地址:https://github.com/iawia002/annie
annie [OPTIONS] URL [URL...]
3. 复杂爬虫
GitHub 地址:https://github.com/chenusc11/flickr-crawler
(1) 注册 Flickr API Key
按照网页引导申请API Key。
(2) 调用接口
其中函数 flickr.photos_search() 可以获得大中小三种不同尺寸的图像,参数 tags 是我们的关键词。
photos=flickr.photos_search(tags=tags,tag_mode='all',per_page=number)