一、简介
爬虫,英文为Spider,译为“网络蜘蛛”。爬虫是一种按照一定规则,自动抓取互联网信息的程序或脚本。在我们身边其实就有很多爬虫,例如百度、谷歌、搜狗等搜索引擎都是大型网络爬虫。
二、分类
按照爬虫对象,可以分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫和深层网络爬虫等。
通用网络爬虫又称为全网爬虫,因其能爬的范围和数量巨大,导致其存在速度较低和所需存储空间较大的缺陷,其主要的应用场景为大型搜索引擎。通用网络爬虫主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库和链接过滤模块等构成。
聚焦网络爬虫又称主体爬虫,与通用网络爬虫不同的是,聚焦网络爬虫依据主体,爬取特定网页,具有爬取速度快和占用网络资源少等特点。
增量式网络爬虫是爬取新产生的页面或发生变化的页面,对未发生变化的页面不进行爬取。这种方式虽然有效减少了数据下载量,但其实现算法的难度也随之增加。
深层网络爬虫指不能通过静态URL链接进行爬取信息,需要提交一定的关键字,才能访问更深层次的页面。深层网络爬虫主要由六个基本功能模块(爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS控制器)和两个爬虫内部数据结构(URL列表、LVS表)等部分构成。其中 LVS(LabelValue Set)表示标签/数值集合,用来表示填充表单的数据源。
三、爬虫技术
1、请求库
爬虫常见的请求库主要由requests和urllib,下面只对requests库进行阐述,因requests是基于urllib所实现的HTML库。
1.1 requests库简介
Requests是Python中的第三方库,是基于urllib,采用Apache2 Licensed开源协议的 HTTP 库。requests用于发送HTTP请求(以下简称URL),并获取响应数据。因urllib的代码臃肿,实现功能逻辑较为繁杂,所以衍生出requests模块。常常应用于爬虫中对网页内容的下载。
Requests访问HTTP会创建request对象(请求)和response对象(响应)。
1.2 安装环境
因Requests是Python的第三方库,所以需要手动安装Requests环境。当使用VsCode作为编译工具时,可以在VsCode的“终端”窗口输入安装命令即可(如果遇到安装失败的情况,可以重试几次,具体原因不详)。
pip install requests
1.3 请求方法
1.3.1 requests.request()
Request()是所有请求方法的基本方法。其代码格式为:
import requests
"""request()"""
url = "http://www.baidu.com/"
req = requests.request('get',url)
request()方法主要的参数有:
Method:可选参数,字符串类型,用于指定请求所使用的方法,包括GET、POST、PUT、DELETE等。
url:可选参数,字符串类型,用于设定请求资源的接口(API),或者说是请求网页的网址。
params:可选参数,字典类型,用于GET请求的查询参数。例如:
'''params参数'''
# 例如通过百度搜索“伊朗”
url = "http://www.baidu.com/s"
params = {'wd':'伊朗'}
req = requests.get(url,params=params)
data:可选参数,字典类型,常用于POST、PUT、DELETE等方法提交的表单参数。
json:可选参数,字典类型,用于上传json数据的参数,被封装到body(请求体)中。请求头的Content-Type默认设置为application/json。
files:可选参数,字典类型,是指定files用于上传文件,一般使用POST方法,默认请求头content-type为‘multipat/from-data类型。’
headers:可选参数,字典类型,用于设定user-agent、refer等请求头。能够模拟浏览器向服务器发起访问。
Auth:可选参数,元组类型,用于授权的用户名和口令,格式为(‘username’,’password’)
timeout:可选参数,用于设置超时时间,单位为“s”
verify:True/False,默认为True,判断是否需要进行HTTPS证书验证,如果为True,则需要自己设置证书地址
allow_redirects:True/False是否让requests做重定向处理,默认True
cookies:附带本地的cookies数据
cert:本地SSL证书路径
1.3.2 其他请求方法
其他请求方法与request()方法用法类似,不做过多说明。
方法 |
内容 |
delete(url, args) |
向网页提交删除请求 |
get(url, params, args) |
获取html网页的主要方法 |
head(url, args) |
获取html网页头信息 |
patch(url, data, args) |
向html网页提交局部修改请求 |
post(url, data, json, args) |
向网页提交post请求 |
put |