昨日内容回顾
-
数据获取方式
# 白嫖类 # 付费类 # 第三方 '''一定要保存好 将来很有可能需要'''
-
爬虫简介
什么是互联网 利用网线 路由器 交换机等物理链接介质将接入的计算机彼此互联起来 互联网建立的目的 实现数据的远程传递 什么是上网 基于互联网访问计算机内部的数据 '''互联网领域没有绝对的安全''' 浏览器访问网站 跳过浏览器界面展示数据给用户看(数据不一定都是用户想看的) 爬虫访问网站 跳过代码模拟请求访问数据并且筛选出符合条件的关键数据
-
HTTP协议
为什么要有这个协议? 浏览器能够访问很多服务端 而不同的服务端是不同的程序员编写的 那如何做到兼容 就需要制定一套标准 超文本传输协议 规定了浏览器与服务端之间数据交互的方式 1.四大特性 1.基于请求响应 2.基于TCP/IP作用于应用层之上的协议 3.无状态 4.无连接 2.数据格式 请求格式 请求首行 请求头 请求体 响应格式 响应首行 响应头 响应体 3.状态码 用简单的数字来表示一些状态 1XX:正在处理数据 2XX:200 3XX:重定向 4XX:403 404 5XX:服务端内部错误 # 公司内部也会自己定义状态码 一般都是从10000开始
-
网络请求方法
""" url:统一资源定位符 可以简答的理解为就是网址 """ get请求 朝别人索要数据 eg:输入网址获取页面数据 get请求携带数据的方式 url?username=jason&hobby=read # 携带的数据大小有限制 post请求 向别人提交数据 eg:用户登录注册 post请求携带数据的方式 直接放在请求体里面 # 携带的数据大小没有限制
-
HTML
构造网页的骨架(浏览器展示给我们看到的内部其实都是HTML) 什么是前端 什么是后端 前端三剑客 HTML CSS JS(JavaScript) # head内常见标签 link style title script meta # body内常见标签 h1~h6 标题标签 p 段落标签 u、i、s、b 下划线 斜体 删除线 加粗 br hr 换行 水平分割线 # 特殊符号 < > ¥ © ® & 等同于& # body内常用标签 a 链接标签 img 图片标签 div与span 布局标签 '''有一些标签可以无限嵌套'''
今日内容概要
- 标签的两大属性(重要)
- 列表标签
- 表格标签
- form表单(重要)
- 爬虫模块之request模块
- cookie与session(重要的概念)
今日内容详细
标签的两大属性(重要)
标签的属性其实就是书写在标签内部的配置
eg:
<a href=''></a> # href就是a标签的一个属性
<img src='' title='' alt=''/> # src title alt就是img的属性
'''html标签可以有很多属性'''
# id属性
类似于身份证号码 在同一个html文件内 标签的id值一定不能重复且不能有多个
<p id='p1'></p>
<a id='a1'></a>
给标签加id属性的目的就是为了后续方便查找对应的标签
# class属性
类似于分类 将个体组织成整体 每个整体内可以有多个个体
class 值可以重复并且也可以有多个 空格隔开即可
<div class='c1'></div>
<span class='c1'></div>
给标签加class属性目的也是为了后续方便查找对应的标签
'''
id与class精确度不同
id指名道姓只能查找到一个标签
class则是查找到一类标签
'''
列表标签
看似有规则排列的横向或者竖向基本使用的都是列表标签
无序列表
<ul>
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
</ul>
有序列表
标题列表
# 上述三个列表中使用频率最高的是无序列表
表格标签
需要展示多行数据的时候一般使用表格标签
1.基本格式
<table>
<thead></thead> # 表头字段部分
<tbody></tbody> # 表单数据部分
</table>
2.详细写法
一个tr标签表示一行
th和td都是一个个单元格
<table border="1" class="table table-hover table-striped">
<thead>
<tr>
<th>序号</th>
<th>用户名</th>
<th>密码</th>
<th>地址</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>jason</td>
<td>123</td>
<td>芜湖</td>
</tr>
</tbody>
</table>
form表单
# 能够获取用户数据并发送给后端服务器
截至目前如果需要获取用户数据并且发送给后端那么需要使用form标签
所有获取用户数据的标签都必须写在form表单内才可以发送
input标签
type属性
text 普通文本
password 密码
email 邮箱
radio 单选
checkbox 多选
date 日期
file 文件
button 普通按钮
reset 重置
submit 提交数据
select标签
一个个的下拉框选项就是一个个的option标签
默认是单选可以改为多选
<select multiple></select>
textarea标签
获取大段文本内容
button标签
按钮标签 在form标签内书写也可以触发提交数据的功能
'''
获取用户数据的标签一般都需要有name属性
相当于是字典的key
用户输入的数据相当于是字典的value
'''
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>用户注册</h2>
<form action="" >
<p>用户名:
<input type="text">
</p>
<p>密码:
<input type="password">
</p>
<p>邮箱:
<input type="email">
</p>
<p>性别:
<input type="radio" name="gender">男
<input type="radio" name="gender">女
</p>
<p>兴趣:
<input type="checkbox">篮球
<input type="checkbox">足球
<input type="checkbox">骑行
</p>
<p>生日:
<input type="date">
</p>
<p>省市:
<select name="" id="">
<option value="">上海</option>
<option value="">北京</option>
<option value="">天津</option>
</select>
</p>
<p>工作经历:
<textarea name="" id="" cols="20" rows="3"></textarea>
</p>
<p>教育经历:
<textarea name="" id="" cols="20" rows="3"></textarea>
</p>
<p>自我介绍:
<textarea name="" id="" cols="20" rows="3"></textarea>
</p>
<p>个人荣誉:
<textarea name="" id="" cols="20" rows="3"></textarea>
</p>
<p>个人简历:
<input type="file">
</p>
<p>多套附件:
<input type="file" multiple>
</p>
<p>
<input type="submit" value="注册">
<input type="button" value="按钮">
<input type="reset" value="重置">
<button>按钮</button>
</p>
</form>
"""
request模块
什么是模块?
写好的可以直接拿来使用的代码块(可以是文件 也可以是文件夹)
pip3 install 模块名
正则表达式
从字符串中按照特定的符号筛选出符合条件的数据
import requests
# 发送get请求索要数据
res = requests.get('https://www.baidu.com')
"""
相当于在浏览器地址栏里面输入了网址https://www.baidu.com
"""
# print(res) # 响应对象
# print(res.status_code) # 查看响应状态码
# print(res.text) # 直接获取文本数据
# res.encoding = 'utf8' # 指定编码
# with open(r'baidu.html','w',encoding='utf8') as f:
# f.write(res.text)
print(res.content) # 获取没有解码的二进制数据
"""
乱码的核心其实就是编码不一致导致的
解决的方式也很简单 找到对应的编码解析即可
encode 编码:将人类能够读懂的字符编码成计算机能够读懂的数据
decode 解码:将计算机能够读懂的数据解码成人类能够读懂的字符
"""
额外的参数
url问号后面的参数携带方式
requests.get(url,params={})
请求头
防爬措施(重点)
校验当前请求是否是浏览器发出的
校验的键值对就是
User-Agent:...
如何避免
在爬虫程序的请求头中加上固定的键值对即可
User-Agent:...
requests.get(url,headers={})
练习
1.请求头
2.代码请求过来的数据不需要样式
import requests
res = requests.get('https://dig.chouti.com/',
# 加上User-Agent伪装浏览器
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'
}
)
print(res.status_code) # 403 没有权限访问
with open(r'chouti.html','wb') as f:
f.write(res.content)
cookie与session
由于HTTP协议是无状态的(无法保存用户状态)
刚开始的应用程序都不需要保存用户状态 所有人来请求都是返回相同的页面
相当于报纸一样
可是到了后来出现了类似于淘宝 天猫 京东这样的需要保存用户状态的网址
那么有了cookie与session技术
cookie
保存在客户端浏览器上面的数据
"""
当用户输入了正确的用户名和密码之后
浏览器会自动保存起来 之后朝网址发送请求的时候浏览器会自动将用户名密码携带过去 这样服务端就能够知道当前请求是哪个用户发出的 并且用户感觉不到每次都需要验证用户名和密码
"""
session
保存在服务端上与用户相关的数据
"""
当用户第一次登录成功之后 服务端会保存用户当前状态
并且返回给客户端浏览器一个随机的字符串
之后用户朝服务端发送请求的时候浏览器会自动提交改随机字符串
服务端内部自动比对从而识别当前用户到底是谁
"""
# session的工作需要依赖于cookie 任何需要保存用户状态的技术都需要cookie
requests.get(url,cookies={})
import requests
res = requests.get('https://i.cnblogs.com/',
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'
},
)
# print(res.status_code)
with open(r'cnblogs.html','wb') as f:
f.write(res.content)
作业
1.熟悉所有的HTML标签
并且搭建一个用户注册页面
2.书写今日笔记并复习python基础
3.预习博客研究如何发送post请求并模拟用户登录