FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [View Raw Code]   [Original HTTPS Page]

Notes/python-basic-notes/python-days/Day_50.md at master · We2one/Notes · GitHub

/ Notes Public

Latest commit

 

History

History
156 lines (111 loc) · 5.48 KB

File metadata and controls

156 lines (111 loc) · 5.48 KB

模拟登陆与代理设置

登录页面信息爬取

cookie 与 session
  1. 什么是 cookie 和 session
    • cookie : 网站用来辨别身份,进行会话跟踪,存储在本地终端上的数据
    • session : 主要用于在服务器端存储特定用户对象会话所需要的信息 (会话 : 本意是有始有终的一系列动作和消息)
  2. cookie 和 session 产生的原因
    • http 协议是一个无状态协议,在特定的操作下需要保存信息,因此使用 cookie 和 session 保存信息
  3. cookie 原理
    • cookie 是由服务器产生,浏览器第一次请求,服务器发送给客户端保存.浏览器继续访问时,就会在请求头的 cookie 字段附加上 cookie 信息,使服务器可以识别访问对象
    • cookie 的缺陷:
      1. 用户本地保存,容易被修改,安全性低
      2. 大小受限,最大 4kb
  4. session 原理
    • session 在服务器保存,解决了 cookie 的安全问题
    • 为了使服务器可以识别访问用户,在用户 本地 cookie 中保存 sessionid 字段,在服务器中方便查找
    • session 登录步骤
      1. 导入 requests 库
      2. 使用 requests 生成一个 session 对象 : session = requests.session()
      3. session 对象发起请求,接收响应 response = session.post()
        • session 请求的 url 来自于登录页面 form 表单 action 登录信息的 URL
        • session 请求时的 data 数据都来自于登录界面的 form 表单
  5. 禁用 cookie
    • 禁用 cookie 一般情况下 session 也无法使用
    • url 重写技术 : 禁用 cookie 情况下, 使用 session,将 sessionid 拼接在url内
  6. session 的生命周期 : 服务武器创建开始,有效期结束 (一般网站为 30 分钟) 就删除
案例
  1. cookie 登录

    import requests
    
    	# cookie 登录
    headers = {
    	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
    	'Cookie': 'Cookie值'
    }
    
    url = "http://xue.ujiuye.com/user/index/"
    	
    response = requests.get(url, headers=headers)
    
    print(response.status_code, response.encoding)
    print(response.url)
    with open("./test.html", "w", encoding="utf-8") as f:
    	f.write(response.text)
  2. session 登录

    import requests
    
    session = requests.session()
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
    }
    
    login_url = "https://security.kaixin001.com/login/login_post.php"
    
    data = {
        "loginemail": "用户名",
        "password": "密码",
    }
    response = session.post(login_url, data=data, headers=headers)
    
    print(response.text)

代理设置

  • 如果一直使用同一个 ip 爬取一个网页, 由于采集网站信息强度和收集速度太大,会给服务器带来巨大压力,容易被封杀 IP
代理基本原理
  • 代理 (proxy server 实际上指代理服务器)

    • 功能 : 代理网络用户去取得网络信息
    • 是网络信息中转站
    • 基本原理 : 本机向代理服务器发出请求,代理服务器再向 web 服务器 发出请求, 代理服务器收到响应后,将响应发送回本机,此时 web 服务器识别的将是代理服务器 IP
  • 代理实例

    import requests
    
    proxies = {
        "http": "http://121.31.12.12:5212",
        "https": "https://222.22.11.21:3131",
    }
    
    response = requests.request("get", "http://www.baidu.com/", proxies=proxies)
    print(response.text)

页面响应类型

数据的结构化分类
  • 爬取网页和应用有用内容一般分为三部分:
    1. 结构化数据
      • 可以使用统一结构加以表示的数据。可以使用关系型数据库进行表示和存储,表现为二维形式的数据
      • 特点 : 一行数据表示一个实体的信息,每一行数据属性都相同
    2. 半结构化数据 (自描述的结构)
      • 结构化数据的一种形式,不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素及其对记录和字段进行分层
      • 常见类型有 : JSONXMLHTML
      • 实际存储结构 :
    3. 非结构化数据
      • 没有固定结构的数据,一般整体进行存储,存储为二进制格式
      • 常见类型 : 文档、图片、视频、音频
json 数据
  • JSON (JavaScript Object Notation, JS 对象标记) : 是一种轻量级的数据交换格式,json 是 js 对象的字符串表达式, 使用文本形式表示一个 js 对象的信息,本质是一个字符串
  • Js 中对象和数组是比较特殊并且比较常用的两种类型
    1. 对象表示为键值对
    2. 数据用逗号分隔
    3. 花括号保存对象
    4. 方括号保存数组
  • json 优势
    • Json 作为数据包格式传输时有更高的效率, Json 不像 XML 一样有严格的闭合标签
    • 大大减少网络的传输压力
    • 易于阅读
    • 有效提升网络速度
处理 JSON 数据的两种方式
  1. 使用 json 模块

    1. 将 Python 类型转换为 json 字符串类型: json.dumps()

      json_data = json.dumps(dic)
    2. 将 json 字符串类型转换为 Python 类型 (字典或列表): json.loads()

    dic_data = json.loads(json_data)

  2. Requests 方法

    • requests.json() : 直接获取json 数据对应的 python 数据类型

Back | FazBrowse Home | New Git URL