1、爬虫基本原理讲解

爬虫基本原理

概述:网络爬虫(web spider) 又称为网络蜘蛛、网络机器人,是一种按一定规则,自动抓取万维网信息的程序或脚本。

按系统结构和实现技术进行分类

  • 通用网络爬虫:尽可能大的网络覆盖率,如百度,谷歌搜索;
  • 聚焦网络爬虫:有目标性,选择性访问万维网爬取信息(适用开发人员);
  • 增量式网络爬虫:只爬取新产生或已经更新的网页信息(比如爬新闻信息,每天只需要爬取更新的信息,之前的老信息就不爬取了)。特点:耗费少,难度大;
  • 深层网络爬虫:通过提交一些关键字才能获取的Web页面, 如登录或注册后访问的页面;
    注意:在实际应用中通常是以上几种爬虫技术的结合实现。

爬虫应用场景

  • 科学研究:在市场上通过爬虫获取大量数据,获取我们所需要的信息,进行科学研究;
  • Web安全:通过爬虫实现漏洞检测功能(比如检测死链接等);
  • 产品研发:通过获取的数据,进行分析,进行市场研究,可以更好的研发新产品;
  • 舆情监控:分析识别如微博数据中某些用户是否是水军。

网络爬虫的合法性

  • 在很多网站根路径下会有个robots.txt文档,如果没有这个文档,那么网站所有数据都可以爬取;
  • 在有robots.txt文档的网站下,需要判断是否有禁止访客获取数据;
  • 文档举例: https://www.taobao.com/robots.txt 可以查看淘宝网站里面的具体规则。

爬虫基本流程

  • 发起请求 : 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应;
  • 获取响应内容: 如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型;
  • 解析内容: 得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理;
  • 保存数据: 保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件;
  • 可视化输出

网络爬虫的执行过程

  • ①. 获取初始URL;
  • ②. 爬取存储页面内容, 并获取新的URL(重点);
  • ③. 将新的URL放在存储队列中;
  • ④. 在存储队列中读取新的URL;
  • ⑤. 判断是否满足结束条件,如果是,则停止爬取;如果否,则回到②
    在这里插入图片描述

爬虫运行流程

单项的执行过程
①. 主调度器:用于控制调度整个爬取过程
②. url管理器:使用url管理器获取url
③. 下载器:下载url中的内容
④. 解析器:解析url中的数据
⑤. 数据库:对有价值的数据进行更新、入库。

def getPage(url):
    '''爬取指定url页面信息'''
    #可以使用urllib、requests请求数据

def parsePage(content):
    '''解析爬取网页中的内容,并返回字段结果'''
    #可以使用re、xpath、beautifulsoup4、pyquery解析

def writeFile(content):
    '''执行文件追加写操作'''

def main(offset):
    ''' 主程序函数,负责调度执行爬虫处理 '''

# 判断当前执行是否为主程序运行,并遍历调用主函数爬取数据
if __name__ == '__main__':
    #main(0)
    for i in range(10):
        main(offset=i*25)
        time.sleep(1)

什么是Request和Response?

  1. 浏览器发送消息给该网址所在的服务器,这个过程叫做HTTP Request;
  2. 服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response;
  3. 浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示;
    Request和Respons

Request中包含什么?

  1. **请求方式:**主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等;
  2. **请求URL:**URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定;
  3. 请求头包含请求时的头部信息,如User-Agent、Host、Cookies等信息;
  4. 请求体请求时额外携带的数据,如表单提交时的表单数据;

Response中包含什么?

  1. **响应状态:**有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误;
  2. **响应头:**如内容类型、内容长度、服务器信息、设置Cookie等等;
  3. 响应体最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

爬虫能抓怎样的数据?

  1. **网页文本:**如HTML文档、Json格式文本等。
  2. **图片、视频:**如获取到的是二进制文件,保存为图片或视频格式。
  3. **其他:**只要是能请求到的,都能获取。

怎样来解析?

  1. 直接处理
  2. Json解析
  3. 正则表达式
  4. BeautifulSoup.
  5. PyQuery.
  6. XPath.

怎样解决JavaScript渲染的问题?

  1. 分析Ajax请求
  2. Selenium/WebDriver
  3. Splash
  4. PyV8、Ghost.py

可以怎样保存数据?

  1. 保存为纯文本、Json、Xml等
  2. **关系型数据库:**如MySQL、Oracle、SQL Server等具有结构化表结构形式存储。
  3. **非关系型数据库:**如MongoDB、Redis等Key-Value形式存储。
  4. **二进制文件:**如图片、视频、音频等等直接保存成特定格式即可。

网络爬虫使用的技术

  • 网络爬虫框架:scrapy
  • python中相关的库:urllib、urllib3、requests、mechanize、selenium、splinter;
    • 其中 urllib、urllib3、requests、mechanize 用来获取URL对应的原始响应内容 (高效);
    • 其中 selenium、splinter 通过加载浏览器驱动, 获取浏览器渲染后的响应内容,模拟程度更高 (低效)
  • 对于爬取的过程,主要是模拟浏览器向服务器发送构造好的http请求,常见类型有:get / post
  • 对于数据解析方面,有相应的库:lxml, beautifulsoup4, re, pyquery等,常用方法:xpath路径表达式、css选择器 、正则表达式等;
    • xpath路径表达式 、 css选择器 主要用于提取结构化数据;
    • 正则表达式 用于提取非结构化的数据。

爬虫其他相关技术:

  • 数据抓取:
    • HTTP 协议、身份认证机制(Cookie)
    • 网络流量分析: Chrome、Firefox,Firebug、Fiddler、Burpsuit
  • 数据解析
    • HTML结构、JSON数据格式、XML数据格式
    • CSS选择器、Xpath路径表达式、正则表达式、Python编码/解码
  • 数据入库
    • 结构化数据库:MySQL、SQLite
    • 非结构化数据库:Redis
  • 其他:多线程、任务调度、消息队列、分布式爬虫、图像识别、反爬虫技术。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值