爬虫的入门基础
什么是爬虫?
网络爬虫(又被成为网页蜘蛛,网络机器人),就是模拟客户端发起网络请求,接收请求的响应,按照一定的个规则,自动的抓取互联网信息的程序
爬虫的基本流程
分析网站,得到目标url
根据url,发起请求,获取页面的HTML源码
从页面源码中提取数据 a. 提取到目标数据,做数据的筛选和持久化存储 b. 从网页中提取到新的url地址,继续执行第二步
爬虫结束:所有的目标url都提取完,并且得到数据,再也没有其他请求任务
网页的三大特征
每一个网页都有一个唯一的url(统一资源定位符),来进行定位
网页都是通过HTML展示的
所有的网页都是通过HTTP/HTTPS协议来传输的
通用爬虫和聚焦爬虫
通用爬虫:是搜索引擎的重要组成部分 目的:尽可能的将所有的互联网上的网页下载到本地,经过预处理(去噪,分词,去广告),最终将数据存储到本地,做一个镜像备份,形成一个检索系统 缺点: 1.必须遵守robot协议:就是一个规范,告诉搜索引擎,哪些目录下的资源允许爬虫,哪些不允许 2.搜索引擎返回的都是网页,并且返回的90%都是无用的数据 3.不能根据不同用户的需求或者检索结果返回不同的结果 4.通用爬虫对于媒体的文件不能获取
聚焦爬虫:聚焦爬虫是面向主题的爬虫,再爬取数据的过程中对数据进行筛选,往往只会【爬取与需求相关的数据
Robot.txt
Robot协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”,Robot.txt是一个协议,而不是一个命令,他是国际互联网界通行到的规范,大型网站会通过Robot协议来告诉搜索引擎哪些页面可以爬取,哪些不能
参数:
allow:允许爬取
disallow:不允许爬取
七层协议
从上往下 应用层:为用户的应用程序提供网络服务的(http,https,ftp...) 表示层:负责端到端的数据信息可以被另一个主机所理解和识别,并且按照一定的格式将信息传递到会话层 会话层:会话层是管理主机之间的会化进程,负责建立,管理,和终止会话进程 传输层:进行数据传输的(tcp udp) 网络层:路由器 数据链路层:网桥 交换机 物理层:网线 网卡 集线器 中继器
http和https协议
HTTP协议(HyperText Transfer Protocol)中文名叫超文本传输协议: 是用于从网络传送超文本数据到本地浏览器的传送协议
HTTP协议(HyperText Transfer Protocol)中文名叫超文本传输协议: 是用于从网络传送超文本数据到本地浏览器的传送协议
HTTP的端口号为80,HTTPS的端口号为443
HTTPS的安全基础是SSL,因此通过它可以传输的内容都是经过SSL加密的,主要作用是:
建立一个安全有效的信息传送通道,保证数据传送的安全性
确定网站的真实性和有效性
注意:HTTPS比HTTP更安全,但是性能更低
url的基本组成部分
基本格式:schema://host[:port#]/path/?[query-string][#]anchor schema:协议(例如:http, https, ftp) host:服务器的IP地址或者域名 path:访问资源的路径 query-string:参数,发送给http服务器的数据 anchor:锚(跳转到网页的指定锚点位置)
请求的基本流程
from urllib import request
目标url
url = 'http://www.baidu.com'
response = request.urlopen(url,timeout=10)
从response响应结果中获取参数
状态码
code = response.status
print(code)
获取页面源码的二进制数据
b_html = response.read()
print(b_html,len(b_html))
获取响应的相应头部(response headers)
res_headers = response.getheaders()
print(res_headers)
获取响应头中指定参数的值
cokie_data = response.getheader('Set-Cookie')
print(cokie_data)
reason返回一个响应结果的原因
reason = response.reason
print(reason)
get请求和post请求的区别 1.传输数据的大小:对于GET,特定的 浏览器和服务器对URL的长度有限制;对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进 行限制,Apache、IIS都有各自的配置。 2.安全性:POST的安全性比GET的高
请求头的参数 'User-Agent':模拟浏览器进行请求 'Cookie':存储在浏览器里面的,使用 cookie表明用户的身份 'Refere':说明当前的请求是从哪个页面发起的
常用的状态码
200:请求成功
301:永久重定向 302:临时重定向
400:客户端错误 401:未授权 403:服务器拒绝访问 404:页面未找到 405:请求方式不对 408:请求超时
500:服务器错误 503:服务器不可用
bytes类型和str字符串类型的相互转换,bytes和bytearray的区别
1.bytes是Python 3中特有的,Python 2 里不区分bytes和str。 2.str类型使用encode方法转化为bytes类型 bytes类型通过decode转化为str类型 3.bytearray bytearray和bytes不一样的地方在于,bytearray是可变的。
如何发起一个get请求
response = response.get
('www.baidu.com')
正则的基本用法:
. :表示匹配除了换行符之外的任意字符
\ :转义字符
[a-z] : 匹配a-z里面的任意一个字符
\d: 匹配数字 -> [0-9]
\D: 匹配非数字 [^\d]
\s: 匹配空白字符(空格,\n,\t...)
\S: 匹配非空白字符
\w: 匹配单词字符 [A-Za-z0-9_]
\W: 匹配非单子字符
^:匹配以...开头
$:匹配以....结尾
():分组
|:或
多字符匹配
*:匹配*前面的字符任意次数
- : 匹配+号前面的字符至少1次
?: 匹配?前面的字符0次或1次
{m}:匹配{m}前面的字符m次
{m,n}:匹配{m,n}前面的字符m~n次
非贪婪匹配
*?
+?
??
{m,n}?
网友评论