一直想学爬虫,也是由于种种原因吧,没能系统地学习。正好最近在大工pt上看到了爬虫的系统教程,全下载下来,学习并在博客上记录一下。因为我是一个比较懒的人,对于自动化的技术非常着迷,只要能让机器来做,就不需要用人是我一直以来的执念。所以我对机器学习以及其分支-深度学习,爬虫非常着迷。
本文分为两个部分来写:爬虫简介,爬虫前期准备工作
爬虫简介
爬虫本质上来说是一种按照一定规则,自动地抓取万维网信息的脚本。网络抓取的策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致trapped的问题。
最佳优先搜索策略
最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。这是一种局部最优的搜索苏凡
爬虫的组成部分:
- 控制器:主要是负责给多线程中的各个爬虫线程分配工作任务
- 解析器:主要是下载网页,进行页面处理,将一些JS脚本标签、CSS代码内容、空格字符、HTML标签处理掉
- 资源库:用来存放下载到的网页资源,一般使用数据库进行存储
爬虫工作的基本流程:
- 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求包含额外的headers等信息,等待服务器响应。
- 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容就是所要获取的页面内容,类型可能有HTML,JSon字符串,二进制数据(如图片,视频)等类型
- 解析内容:得到的内容可能是HTML,可以用正则表达式,网页解析库进行解析。可能是JSon,可以直接转为JSon对象解析,可能是二进制数据,可以保存或者进一步处理
- 保存数据:保存至数据库,或者保存特定格式的文件。
名词解释:
Request和Response:
浏览器发送信息给信息给网址所在服务器,这个过程叫做HTTP Request
服务器收到浏览器发送的信息之后,能够根据浏览器发送信息的内容作出相应的处理,然后把消息回传给浏览器,这个过程叫做HTTP Response
浏览器收到服务器的Response信息之后,会对信息进行相应的处理,然后显示
Request包含的信息:
请求方式:主要有GET,POST两种类型,另外还有HEAD,DELETE,OPTIONS等
请求URL:URL(统一资源定位符),如一个网页文档,一张图片,一个视频等都可以用URL唯一确定。
请求头:包含请求时的头部信息,如User-Agent,Host,Cookies等信息
请求体:请求额外携带的信息
Response包含的信息:
响应状态:有多种响应状态,如200代表成功,301代表跳转,404代表找不到页面,502代表服务器错误
响应头:如内容类型,内容长度,服务器信息,设置Cookie等
响应体:最主要的部分,包含请求资源的内容,如网页HTML,图片二进制数据等
网页解析方式:
直接处理
JSon解析
正则表达式
BeautifulSoup
XPath
PyQuery
解决JavaScript渲染问题
分析Ajax请求
selenium/WebDriver
Splash
PyV8,Ghost.py
前期准备工作
主要分为三个部分进行,python的安装,数据库的安装,爬虫常用库的安装
-
python的安装:采用anaconda进行,anaconda相当于是一个肯德基全家桶,一次性安装python和相关的库
注意点:
如果你的电脑里有python2,python3,会面临python冲突的问题。需要将python.exe的名称,然后将其所在文件夹添加到环境变量。
-
数据库的安装
-
非关系型数据库MongoDB安装:
- 谷歌搜索MongoDB,下载安装MongoDB
- 在MongoDB根目录下,创建data文件夹,然后在data文件夹里面新建db文件夹
- 在bin文件夹下,打开命令行,输入’mongod --dbpath bin文件夹’
- 然后在data文件夹下新建logs文件夹,并在logs文件夹下新建mongo.log文件(这是一个日志文件)
- 然后在这个logs文件夹下,打开命令行,输入’mongod --bind_ip 0.0.0.0 --logpath log文件的路径(包括文件名) --logappend --dbpath db文件夹 --port 27017 --serviceName “MongoDB” --serviceplayName “MongoDB” --install’
- 然后可以在计算机管理器中将mongoDB打开
- 下载Robomongo(这是MongoDB的可视化界面)
-
Redis安装
- Redis是一个开源的,内存中的数据结构存储系统,可以用来用作数据库、缓存和信息中间件。
- 在github上下载Redis desktop安装数据库可视化界面
- 用于维护非关系数据爬取
-
MySQL的安装
- 首先安装MySQL,可以参考这个博客
- 爬虫常用库的安装
-
Requests库详解 { 概 念 : r e q u e s t s 基 于 u r l l i b , 采 用 Apache2 licensed 开 源 协 议 的 H T T P 库 安 装 : pip install requests \begin{cases}概念:requests基于urllib,采用\text{Apache2 licensed}开源协议的HTTP库 \\ 安装:\text{pip install requests} \end{cases} {概念:requests基于urllib,采用Apache2 licensed开源协议的HTTP库安装:pip install requests
-
Scrapy安装详解 { 概 念 : p y t h o n 开 发 的 一 个 快 速 、 高 层 次 的 屏 幕 抓 取 和 w e b 抓 取 框 架 , 用 于 抓 取 w e b 站 点 并 从 页 面 中 提 取 结 构 化 数 据 安 装 : 通 过 a n a c o n d a 进 行 安 装 是 最 方 便 的 : conda install Scrapy \begin{cases}概念:python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化数据 \\ 安装:通过anaconda进行安装是最方便的 :\text{conda install Scrapy} \end{cases} {概念:python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化数据安装:通过anaconda进行安装是最方便的:conda install Scrapy
-
BeautifulSoup安装详解 { 概 念 : 从 网 页 抓 取 数 据 , 可 以 出 来 导 航 , 搜 索 , 修 改 分 树 的 功 能 安 装 : pip install beautifulsoup4 \begin{cases}概念:从网页抓取数据,可以出来导航,搜索,修改分树的功能 \\ 安装:\text{pip install beautifulsoup4} \end{cases} {概念:从网页抓取数据,可以出来导航,搜索,修改分树的功能安装:pip install beautifulsoup4
-
Selenium安装详解 { 概 念 : 自 动 化 测 试 工 具 。 如 果 你 在 这 些 浏 览 器 里 面 安 装 一 个 S e l e n i u m 的 插 件 , 那 么 便 可 以 方 便 地 实 现 W e b 界 面 的 测 试 安 装 : pip install selenium \begin{cases}概念:自动化测试工具。如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试 \\ 安装:\text{pip install selenium} \end{cases} {概念:自动化测试工具。如果你在这些浏览器里面安装一个Selenium的插件,那么便可以方便地实现Web界面的测试安装:pip install selenium
-
PhantomJs安装详解 { 概 念 : 没 有 界 面 的 浏 览 器 , 可 以 在 后 台 安 静 地 运 行 安 装 : 下 载 p h a n t o m J s , 然 后 解 压 , 将 e x e 文 件 路 径 放 到 环 境 变 量 里 面 \begin{cases}概念:没有界面的浏览器,可以在后台安静地运行 \\ 安装:下载phantomJs,然后解压,将exe文件路径放到环境变量里面 \end{cases} {概念:没有界面的浏览器,可以在后台安静地运行安装:下载phantomJs,然后解压,将exe文件路径放到环境变量里面
-
lxml安装详解 { 概 念 : 用 于 网 页 解 析 安 装 : pip install lxml \begin{cases}概念:用于网页解析 \\ 安装:\text{pip install lxml}\end{cases} {概念:用于网页解析安装:pip install lxml
-
pymysql安装详解: { 概 念 : 用 于 连 接 m y s q l 安 装 : pip install pymsql \begin{cases}概念:用于连接mysql \\ 安装:\text{pip install pymsql}\end{cases} {概念:用于连接mysql安装:pip install pymsql
-
pymongo安装详解: { 概 念 : 用 于 连 接 m o n g o D B 安 装 : pip install pymongo \begin{cases}概念:用于连接mongoDB \\ 安装:\text{pip install pymongo}\end{cases} {概念:用于连接mongoDB安装:pip install pymongo
-
flask安装详解: { 概 念 : P y t h o n 编 写 的 W e b 微 框 架 , 让 我 们 可 以 使 用 P y t h o n 语 言 快 速 实 现 一 个 网 站 或 W e b 服 务 。 安 装 : pip install flask \begin{cases}概念:Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。 \\ 安装:\text{pip install flask}\end{cases} {概念:Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务。安装:pip install flask
-
django安装详解: { 概 念 : D j a n g o 是 应 用 于 W e b 开 发 的 高 级 动 态 语 言 框 架 , 分 布 式 爬 虫 需 要 用 到 安 装 : pip install django \begin{cases}概念:Django 是应用于 Web 开发的高级动态语言框架,分布式爬虫需要用到 \\ 安装:\text{pip install django}\end{cases} {概念:Django是应用于Web开发的高级动态语言框架,分布式爬虫需要用到安装:pip install django