1 http的简单介绍
1 数据类型比较广泛, json/text/lxml/html/data
2 请求是无状态协议,这次的请求和上次的请求没有任何关系,请求完了以后,服务器和客户端的连接会断掉。socket 保持长连接,请求以后,服务器和客户端的连接不会断掉
3 http有请求报文 和响应报文
请求报文:
1 请求行 : http://ww.apiopen.top/weatherApi?city=
2 请求头:
User-Agent: 标示目标(通过什么方式来访问对象)
host: 主机
connection: 服务器和客户端之间的连接状态
3 请求体: 参数 : 郑州 请求体为在请求里面放的参数
响应报文:
1 状态行
2 响应头
3 响应体:请求数据就是为了得到响应体
htttps://www.apiopen.top/weatherApi?city=郑州
协议 + 域名/ip + 路径 以?分割, ?后面的为参数
参数以 = 分割, =前面的是参数名, 后面是参数值
参数与参数之间以 & 符号 隔开
4 http请求方法:
4 http请求方法
method(post,get,delete,put)
post: 可以对数据进行增删改查
get: 可以对数据进行增删改查
1 get和post的区别(面试必问)
1 get的参数放在url的后面,是暴露的
2 post 的参数放在请求体当中,是隐藏的。
2 url的长度大小不能超过1KB(1024B)
1B=8b 一个英文字母:1b, 一个汉字是2b
get 将所有的想要发送到服务器的内容都放到url中
上传文件要使用post 方法。
2 简单的爬虫
from urllib.request import Request, urlopen, ProxyHandler, build_opener
import random
user_agent_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
]
headers = {
'User-Agent': random.choice(user_agent_list)
}
ip_list = [
'124.193.85.88:8080',
'122.114.31.177:808',
'111.155.124.84:8123',
'111.155.116.207:8123',
'122.72.18.34:80',
'61.135.217.7:80',
'111.155.116.234:8123'
]
proxies = {
'https': random.choice(ip_list)
}
request = Request('http://www.baidu.com', headers=headers)
# urlopen 不支持http高级函数:cookie 验证 代理等内容
# 如果要使用这些内容的话,需要使用bulid_opener对象进行处理
proxy_handler = ProxyHandler(proxies)
opener = build_opener(proxy_handler)
response = opener.open(request)
print(response.read().decode())