一直想学爬虫,也是由于种种原因吧,没能系统地学习。正好最近在大工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库详解 $\begin{cases}概念:requests基于urllib,采用\text{Apache2 licensed}开源协议的HTTP库 \ 安装:\text{pip install requests} \end{cases}$
- Scrapy安装详解$\begin{cases}概念:python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化数据 \ 安装:通过anaconda进行安装是最方便的 :\text{conda install Scrapy} \end{cases}$
BeautifulSoup安装详解$\begin{cases}概念:从网页抓取数据,可以出来导航,搜索,修改分树的功能 \ 安装:\text{pip install beautifulsoup4} \end{cases}$
Selenium安装详解$\begin{cases}概念:自动化测试工具。如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试 \ 安装:\text{pip install selenium} \end{cases}$
PhantomJs安装详解$\begin{cases}概念:没有界面的浏览器,可以在后台安静地运行 \ 安装:下载phantomJs,然后解压,将exe文件路径放到环境变量里面 \end{cases}$
lxml安装详解$\begin{cases}概念:用于网页解析 \ 安装:\text{pip install lxml}\end{cases}$
pymysql安装详解:$\begin{cases}概念:用于连接mysql \ 安装:\text{pip install pymsql}\end{cases}$
pymongo安装详解:$\begin{cases}概念:用于连接mongoDB \ 安装:\text{pip install pymongo}\end{cases}$
flask安装详解:$\begin{cases}概念:Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。 \ 安装:\text{pip install flask}\end{cases}$
django安装详解:$\begin{cases}概念:Django 是应用于 Web 开发的高级动态语言框架,分布式爬虫需要用到 \ 安装:\text{pip install django}\end{cases}$