Http协议
HTTP(超文本传输协议)是客户端与网站服务器通信的的一种交互形式,用于传输“含有指向其他资源链接”文本内容,理解HTTP协议对爬虫至关重要。
1.Http的请求构成
请求行
包含方法(GET/POST/PUT/DELETE等)、URL(请求的资源路径)和协议版本(HTTP/1.1或HTTP/2)
GET https://www.baidu.com/ HTTP/1.1
请求头
包含客户端信息,如User-Agent(身份标识), Referer(用来表示当前请求是从哪个页面跳转过来的), Host(客户端请求的服务器的域名)等
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
Referer: https://cn.bing.com/
Host: www.baidu.com
其他相关请求头可参考下面这篇文章请求头详解
请求体
主要用于POST请求,请求时发送的数据,表单数据、JSON、XML等
请求方式: get与post请求
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.
- POST方法是把提交的数据放在HTTP包的请求体中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有大小限制,且携带的请求数据不可以明文方式连接在url中。
2.Http的响应构成
状态行
包含协议版本、状态码和状态描述
HTTP/1.1 200 OK
2xx (成功):200 OK (最常见)。
3xx (重定向–即跳转访问到另一个页面):301 (永久), 302 (临时), 304 (未修改)。
4xx (客户端错误):400 (请求错误), 403 (禁止访问), 404 (未找到)。
5xx (服务器错误):500 (内部错误), 502 (网关错误)。
响应头
存储的是该响应的一些主要说明,如Set-Cookie(设置cookie)、Content-Type(内容类型)、Location(重定向地址)
Set-Cookie:
Location:
Content-Length:
响应体
发送给客户端的指定数据,HTML、JSON、图片等实际内容
3.爬虫的Http实践
- 设置请求头
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml',
'Accept-Language': 'en-US,en;q=0.9',
'Referer': 'https://www.example.com/',
'Cookie': 'sessionid=abc123; csrftoken=xyz456'
}
response = requests.get('https://www.example.com', headers=headers)