网络爬虫(又被称为网页蜘蛛,网络机器人) 就是模拟客户端(主要指浏览器)发送网络请求,接收请求响应,按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是客户端(主要指浏览器)能做的事情,爬虫都能够做。
爬虫分类:
通用爬虫:
通常指搜索引擎的爬虫(百度,谷歌)
聚焦爬虫:针对特定网站的爬虫
积累式爬虫:从开始运行到打到停止条件的过程中不断爬取目标数据,过程中会进行去重操作
增量式爬虫:只爬取新产生的或者已经发生变化网页的爬虫
深网爬虫:隐藏在搜索表单或登录表单之后的数据,只有用户提交一些关键词或登录才能获得的Web页面
robots协议
在百度搜索中,不能搜索到淘宝网中某一个具体的商品的详情页面,这就是robots协议在起作用
Robots协议:
Robots协议(也成为爬虫协议、机器人协议等) 的全称是“网络爬虫排除标准”,网站通过Robots协议告诉搜索引擎那些页面可以抓取、哪些页面不能抓取
Robots协议是一个道德层面的约定,爬虫作者遵不遵守完全看自己意愿。
例如:淘宝的robots协议
小结:
爬虫分类:通用爬虫、聚焦爬虫
爬虫的流程:
向起始url发送请求,并获取响应
对响应进行提取
如果提取url,则继续发送请求获取响应
如果提取数据,则将数据进行保存
robots协议:无需遵守该协议
在发送请求,获取响应的过程中就是发送http或https的请求,获取http或https的响应
url list ————
| |
http,https |
| |
响应内容 ——提取url
|
提交数据
|
入库
http
超文本传输协议
应用(http)
TCP
Ip
默认端口80
https
HTTP+SSL(安全套接字层),即带有安全套接字层的超文本传输协议
默认端口号:443
https比http更安全,但是性能更低
应用(http)
SSL
TCP
Ip
浏览器先向地址栏中的url发起请求,并获取响应
在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改--这个过程叫做浏览器的渲染
注意:
但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应(该响应的内容可以是html,css,js,图片等)
浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样
所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取
请求方法 空格 URL 空格 协议版本 回车符 换行符 #这是请求行
头部字段名 : 值 回车符 换行符
... #这三个是请求头部
头部字段名 : 值 回车符 换行符
回车符 换行符
#这一行是请求数据
http常见请求头
Host(主机和端口号)
Connection(链接类型)
Upgrade-Insecure-Requests(升级为HTTPS请求)
User-Agent(浏览器名称)
Accept-Encoding(文件编解码格式)
Cookie(Cookie)
x-requested-with:XMLHttpRequest(表示该请求是Ajax异步请求)
http重要的响应头
Set-Cookie (对方服务器设置cookie到用户浏览器的缓存)
Last-Modified (对方静态页面最后更新时间)
响应状态吗(sataus_code)
常见的状态码:
200成功
302、307:临时转移至新的url
404:找不到该页面
500:服务器内部错误
503:服务器不可用
所有的状态码都不可信,一切以是否获取到数据为准
小结:
记忆http、https的概念和区别:
http:超文本传输协议
https:http+ssl,即带有安全套接字层的超文本传输协议
记忆浏览器发送httpp请求的过程:
浏览器先向地址栏中的url发起请求,并获取相应在返回的响应内容(html)中,会带有css,js,图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应,浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应,从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改
记忆http请求头的形式:
GET/item/503/1227315?fr=aladdin HTTP/1.1
Host:www.baidu.com
....
记忆http响应头的形式
keepalive在很多情况下能够重用连接,减少资源消耗,缩短响应时间
HTTP/1.1 200 OK
Connection:keep-alive
...
str:unicode的呈现形式
bytes:字节类型,互联网上数据的都是以二进制的方式(字节类型)传输的
str和bytes类型的互相转换:
str使用encode方法转换为bytes
s=‘asd‘
print(type(s)) 结果为str
#str编码转变为bytes类型
b=s.encode()
print(type(b))
bytes通过decode转化为str
b=b‘asd‘
print(type(b))
#bytes类型解码成为str类型
s=b.decode()
print(type(s))
原文地址:https://www.cnblogs.com/sll-csdn/p/10926059.html