python——爬虫

python爬虫基础

2018-11-24  本文已影响82人  命运丿

1、爬虫概述

爬虫、又被称为网路爬虫,主要指从互联网上进行数据采集的脚本——后者程序,是进行数据分析和数据挖掘的基础。
教程主要从如下几方面对爬虫进行解说明:

1.1、爬虫分类

根据项目中的使用情况进行区分,主要分为两大类:通用大虫和聚焦爬虫
根据采集数据的过程进行区分,又可分为两大类型:累积爬虫和增量爬虫

11.1、通用怕成 & 聚焦爬虫

通用爬虫:最常见的数据采集程序,是网络上搜索引擎使用的脚本程序,搜索引擎通过通用爬虫进行互联网上的数据采集,提供给自己的客户进行数据搜索使用;通用爬虫采集的数据具有普遍性,针对性较差;但是通用爬虫的重用性较高,一旦开发调试完成,可以长时间运行给搜索引擎需要的数据

聚焦爬虫:是数据供应商企业使用最多的爬虫程序,通常情况针对指定的范围的数据进行定向的数据采集和筛选,能在一定时间段内最大限度的采集企业需要的有效数据;但是重用性较差,一般针对不同数据需求、需要独立开发爬虫程序进行数据采集

1.1.2、累积爬虫 & 增量爬虫

累积爬虫:目标数据一旦生成,不会发生改动,随着时间的延伸数据量逐渐增大,累积爬虫就是采集这样的数据,采集并保存历史数据之后针对新生的数据进一步获取,采集过程中不会更新历史数据;如采集期权股票的数据、房地产地域价格历史数据等等

增量爬虫:目标数据在需求更改过程中,可能会随时发生变化;历史数据的变动和新增数据都被称为增量,所以针对此类数据采集的爬虫程序,称为增量爬虫;增量爬虫的特点就是在采集数据的过程中随机更新历史数据的同时采集新增数据。如:搜索引擎采集网络数据,网络上的页面数据随时可能发生变化,需要爬虫针对采集的历史数据随时进行更新并采集新增的网页数据。

1.1.3、robot协议
活跃在网络上的数据本身就是需要相关的客户进行访问查看的,所以正常情况下网络客户能查看到的数据爬虫一般都能采集处理;

但是很多情况下有些数据是受到保护的,网站一般发表声明该类型数据被当前网站版权保护,其个人或者单位不能将该网站数据用于其他网站或者商业目的等,就是一种比较常规的限制。
同时在网络上活跃着很多深层网络数据,进行爬虫数据采集的过程中,很有可能会从正常网页中采集到该类型的URl 地址并获取数据,该类型数据极有可能回事涉密数据,如果进行非法访问和采集会——民事责任 / 刑事责任
ROBOT 协议就是针对这样的问题出现的规范和约束,一般稍有安全意识的网站都会有自己的robot协议,协议规范了允许爬虫采集的网站地址列表和禁止访问的地址列表,方便爬虫程序在采集的过程中进行参考使用。
访问(https://ziyuan.baidu.com/robots/index)

1.2、为什么要使用爬虫

爬虫的作用是从网站上采集(下载)数据的,目前市场上流行的下载工具比比皆是,使用爬虫的优势 和使用场景的目的性一定要明确:

爬虫的优势是将下载数据的过程通过编写的程序实现自动化批量处理,但是自动化有两个前提条件:需要编写程序、可以批量处理;这两个前提条件同时也说明了爬虫的使用场景

1.3、爬虫使用注意事项

爬虫技术在一定程度与上还是备受争议的,尤其是聚焦爬虫在数据处理过程中对于目标数据所在的服务器会造成短时间的压力提升;爬虫程序由于程序本身的特殊性,在一定程度上可能会引发对一些网站的恶意攻击行为;爬虫采集数据的过程中对于数据的涉密性区分不是很严格,主要开人工手段进行筛选操作:所以爬虫处理过程中一定注意如下:

2、爬虫基础

简单入门掌握学习,熟悉爬虫步骤处理,对于爬虫采集数据有初步认识。

2.1、入门程序

爬虫采集数据,主要采集网站数据,通常情况下操作步骤如下:

import 依赖的模块 ——————#引入依赖
url = “目标网站确定的具体url地址” ————#定义目标url
response = request . open (url) ————#f发送请求
html = response . 数据() ————#得到相应的目标数据
content = html 。 解码() ————#解码得到正确的数据

python3中处理采集数据的内置模块主要是urllib,该模块中包含了大量的和爬虫操 作的相关功能模块和函数处理,按照上述步骤进行操作,具体代码编写如下:

#引入需要的依赖模块
from urllib import  request

#向服务器发送请求,获取相应对象
response = request.urlopen("http://baidu.com/")

#从相应对象中获取服务器返回的数据
html = response.read()
#获取的数据进行编码处理、打印
print(html.decode())

2.2、URLLIB模块

URLLIB模块是一个高级的 web 交流库,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象。urllib 支持各种 web 协议,例如:HTTP、FTP、Gopher;同时也支持对本地文件进行访问。

urlopen返回对象提供方法:

详细urllib讲解单独章节~

2.3、数据编码处理

我们通过爬虫程序可以得到网站返回的数据,但是返回的数据在展示过程中,出现了乱码的问题,是因为网站本身有自己的字符编码(通常情况下是“utf-8”’),我们程序在采集完成之后再控制台进行展示的过程中是使用本地默认的编码(windows 一般是gbk、Unix 中一般是utf-8),如果两部分编码不一致,就不出现乱码的问题。

#引入需要的依赖模块
from urllib import request

#向服务器发送请求,获取相应对象
response = request.urlopen("https://baidu.com/")

#从相应对象中获取服务器返回的数据
html = response.read()
#获取的数据进行编码处理
get_html = html.decode('utf-8')
# 打印
print(get_html)


但是手工指定编码方式的操作,存在很大的局限性,批量网页处理过程中一旦出现不同编码格式的网页,很容易造成程序异常导致数据遗漏,所以我们可以通过python第三方模块进行目标数据的分析判断,得到一个具体的编码格式,然后通过该检测的编码格式进行数据的解码工作
remark: 通过chardet模块可以直接检测目标数据的编码格式,但是编码格式只是一个检测的概率值,所以在编码解码错误的情况下,需要人工介入进行解码操作

#引入需要的依赖模块
from urllib import request
import chardet

#向服务器发送请求,获取相应对象
response = request.urlopen("https://baidu.com/")

#从相应对象中获取服务器返回的数据
html = response.read()
#获取的数据进行编码处理
encoding = chardet.detect(html).get('encoding')
get_html = html.decode(encoding)
# 打印
print(get_html)

2.4、请求对象的包装

前面的代码中,目标网站的url地址就是一个普通的字符串,通过该字符串可以发起一个具体的请求、但是在网站操作过程中,客户端发送的一个请求可能会包含较多的格式数据如:请求url、请求头、请求体、参数、cookie等等数据;

爬虫操作就是在模拟真实用户的操作,请求的操作可以通过请求对象的方式进行模拟,在python3中的urllib模块下的Request类型,就是一个模拟发送的请求对象。

更新请求头设置 > ip代理请求

上一篇 下一篇

猜你喜欢

热点阅读