网络爬虫06.16

昨日内容回顾

  • 数据获取方式

    # 白嫖类
    # 付费类
    # 第三方
    '''一定要保存好 将来很有可能需要'''
    
  • 爬虫简介

    什么是互联网 
    	利用网线 路由器 交换机等物理链接介质将接入的计算机彼此互联起来
    互联网建立的目的
    	实现数据的远程传递
    什么是上网
    	基于互联网访问计算机内部的数据
    '''互联网领域没有绝对的安全'''
    浏览器访问网站
    	跳过浏览器界面展示数据给用户看(数据不一定都是用户想看的)
    爬虫访问网站
    	跳过代码模拟请求访问数据并且筛选出符合条件的关键数据
    
  • 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请求并模拟用户登录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值