目录
基础篇:
HTTP:
HTTP请求:
HTTP请求大致分为两类:GET方法与POST方法,前者向服务器发送获取数据请求,后者则向服务器发送创建数据请求
请求行:
# 请求行
方法类型 资源路径 协议版本
# 示例
POST /user/info HTTP/1.0
资源路径指明访问服务器的具体资源:
例如 www.douba.com/movie/top250 中 /movie/top250 即为资源路径
此外,还可以在资源路径后指定查询参数缩小查询范围:
www.douban.com/movie/top250?start=75&filter=unwatched
start=75 与 filter=unwatched 均为查询参数,不同查询参数间用 & 隔开
请求头:
# 请求头 ———— 包含给服务器的具体信息
Host: 主机域名
User-Agent: 告知服务器客户端的相关参数
Accept: 客户端接受信息类型
Referer: 防盗链(反爬)
cookie: 本地字符串数据信息(用户登录信息-反爬)
# 示例
Host:www.tassel.com
User-Agent:curl/7.77.0
Accept:*/*
客户端类型及其User-Agent参数:
客户端类型 | User-Agent参数 |
---|---|
curl命令行工具 | curl/7.77.0 |
Requests库 | python-requests/2.25.1 |
Chrome | Mozilla/5.0 (Macintosh;Intel Mac OS X 10_15_7) |
信息类型及其Accept参数:
信息类型 | Accept参数 |
---|---|
HTML | text/html |
JSON | application/json |
HTML + JSON | text/html,application/json |
任意类型 | */* |
请求体:
# 请求体 ———— 客户端传递给服务器任意信息
# 示例
{"username":"Tassel",
"email":"[email protected]"}
注意:GET方法的请求体通常为空
HTTP响应:
状态行:
# 状态行
协议版本 状态码 状态信息
# 示例
HTTP/1.0 200 OK
状态码及其状态信息:
状态码 | 状态信息 |
---|---|
200 OK | 客户端请求成功 |
301 Moved Permanently | 资源被永久移动到新地址 |
400 Bad Request | 客户端不能被服务器所理解 |
401 Unauthorized | 请求未经授权 |
403 Forbidden | 服务器拒绝提供服务 |
404 Not Found | 请求资源不存在 |
500 Internal Server Error | 服务器发生不可预期的错误 |
503 Server Unavailable | 服务器当前不能处理客户端的请求 |
响应头:
# 响应头 ———— 服务器返回数据内容的部分参数
Date: 响应日期与时间
Content-Type: 返回内容类型及编码格式
cookie: 本地字符串数据信息(用户登录信息-反爬)
# 示例
Date:Fri,27 Jan 2023 02:10:48 GMT
Content-Type:text/html;charset=utf-8
响应体:
# 响应体 ———— 服务器返回的具体数据内容
# 示例
<!DOCTYPE html>
<head><title>首页</title></head>
<body><h1>Tassel</h1><p>Hello!</p></body>
</html>
Requests库:
利用Python中的Requests库可以轻松快捷地进行网页爬取
GET请求:
# 导入Requests库并获取网站源码
import requests
response = requests.get("http://books.toscrape.com/")
response.status_code # 状态码
response.text # 网站源码
# 利用"response.ok"属性判断网站请求是否成功
if response.ok:
print(response.text)
else:
print("请求失败")
# 利用"head"参数伪造客户端访问
head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
# 示例1 ———— 获取豆瓣Top250电影网页源码
import requests
head = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
"AppleWebKit/537.36 (KHTML, like Gecko)"
"Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
response = requests.get('https://movie.douban.com/top250',headers=head)
print(response.status_code)
print(response.content.decode(encoding='utf8'))
response.close()
# 示例2 ———— 封装参数获取豆瓣电影高分排行榜
import requests
url = "https://movie.douban.com/j/search_subjects"
# 封装参数
param = {
"type": "tv",
"tag": "热门",
"page_limit": 50,
"page_start": 0,
}
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
response = requests.get(url=url, params=param, headers=head)
print(response.json())
response.close()
POST请求:
# 实例 ———— 百度翻译发送请求
import requests
url = "https://fanyi.baidu.com/sug"
string = input("请输入将翻译的英语单词: ")
# data参数
data = {
"kw": string
}
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
# 发送POST请求必须将数据存放在字典中,通过data参数传递
response = requests.post(url, headers=head, data=data)
# 将服务器返回内容转化为json()格式
print(response.json())
response.close()
HTML:
HTML 定义网页的结构和信息
CSS 定义网页的样式
JavaScript 定义用户和网页的交互逻辑
HTML网页结构:
<!DOCTYPE HTML>
<html>
<body>
<h1>标题</h1>
<p>文字</p>
</body>
</html>
HTML网页以起始,以结束
其中又由组合构成众多对象,各对象中包括大量由HTML标签划定的网页内容
HTML标签:
标签 | 说明 | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
标题 | |||||||||||||||||||||||||||||||||||||||||||||||||
文本 | |||||||||||||||||||||||||||||||||||||||||||||||||
图片 | |||||||||||||||||||||||||||||||||||||||||||||||||
链接 | |||||||||||||||||||||||||||||||||||||||||||||||||
容器 | |||||||||||||||||||||||||||||||||||||||||||||||||
容器 | |||||||||||||||||||||||||||||||||||||||||||||||||
有序列表 无序列表 |
|||||||||||||||||||||||||||||||||||||||||||||||||
网页解析:Regular Expression:
元字符:
量词:
相关文章
|