爬虫介绍
什么是爬虫?
一个自动从网络获取数据的程序。
爬虫能干什么?
1.新闻数据:eg 今日头条
2.机器学习:eg 股票数据分析
3.网络搜索引擎:eg 百度,谷歌
http协议
请求头部(原始头)-----客户端发送给服务器
GET / HTTP/1.1 方法 路径 版本号
host : 远程服务器主机
Connection:keep-alive 客户端希望的连接方式 保持连接
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
客户端能接受的媒体类型*/* 接受任何类型媒体数据
user-Agent:用来标识浏览器的身份
Accept-Encoding:gzip,default,sdch 客户端能接受编码类型
Accept-Language:客户端能接受的语言类型
应答内容----服务器回复给客户端
HTTP/1.1 200 OK 版本号 应答码(200正确) 应答信息
Server:表示应答的服务器是谁
Content-Type:text/html;charset=utf-8 表示应答内容是什么数据(text/html网页数据)
Last-Modified: 网页上次修改时间
Content-Encoding:gzip 编码方式 可以减少网络传输数据大小
Content-Length:4315 应答数据量(字节)
应答码类别
2xx:成功
200:OK
206:Partial Content(部分内容)
3xx:重定向
4xx:客户端错误
400:Bad Request 请求格式不对
404:Not Found 请求资源不存在
5xx:服务端错误
URL介绍
组成部分
协议+路径+参数 eg http://www.baidu.com/?t=1
编码规则
除了英文、数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码
eg:百度搜索中文
https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87&rsv_spt=1&rsv_iqid=0xe9075950000062e4&issp=1......
wd=%E4%B8%AD(中)%E6%96%87(文)
参数规则
参数以问号开始,参数对以key=value形式,参数对之间使用&号连接
https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87&rsv_spt=1&rsv_iqid=0xe9075950000062e4&issp=1....
Cookie介绍
cookie数据样式
cookie格式
客户端发送Cookie时:
Cookie:key1=value1;key2=value2
服务器端保存Cookie时:
Set-Cookie:key1=value;path=/;domain=xx
domain and path:定义cookie的作用域。当指定domain,这个domain及其子域名都包含这个cookie。
expires:定义cookie的生命周期
HttpOnly:禁止脚本访问(只能通过浏览器,否则会不安全)
cookie用途
1.登录信息:判断用户是否登录(保存密码)
2.购物车:保存购买商品
cookie总结
1.服务器在客户端存储的信息。(服务器生成服务器解释)
2.请求时,客户端需要把未超时的cookies发送回客户端
3.应答时,服务器会把新的cookies发给客户端,以便下次访问时携带这些cookies
urllib介绍
urllib.urlopen
python 3.x urlopen用法
from urllib import request
s = request.urlopen('http://www.baidu.com') #必须要加“http://”协议名
for i in range(10):
print('line %d: %s' % (i + 1,s.readline())) #标准化输出
print(s.getcode()) #获取网页状态码
HTTPMessage
# _*_ coding: utf-8 _*_
import urllib
s = urllib.urlopen('http://www.baidu.com')
# print(s.readlines())
msg = s.info()
print(msg.headers) #['Date: Mon, 29 Jan 2018 09:27:27 GMT\r\n', 'Content-Type: text/html; 打印http头字段
print(msg.items()) #[('bdqid', '0xe19f7a9c000457fd'), ('x-powered-by', 'HPHP'), ֵ 打印http头
print(dir(msg)) #['__contains__', '__delitem__', '__doc__', '__getitem__', 打印对象包含方法dir()
print(msg.getheader('Content-Type')) #text/html; charset=utf-8 打印头数据
urllib.urlretrieve
# _*_ coding: utf-8 _*_
import urllib
fname, msg = urllib.urlretrieve('http://www.baidu.com','index.html')
print(fname) # index.html 打印文件名
print(msg.items()) #[('bdqid', '0x97db4c72000002c5'), ('x-powered-by', 'HPHP'), ... 打印http头
reporthook
# _*_ coding: utf-8 _*_
import urllib
def progress(blk,blk_size,total_size):
print('%d/%d - %.03f%%' % (blk * blk_size, total_size, (float)(blk * blk_size) *100 / total_size))
urllib.urlretrieve('http://www.baidu.com', 'index.html', reporthook=progress) #90112-1 - -9011200.000% ... 下载进度