爬虫的概念

  • 模拟客户端发送网络请求 获取响应 按照规则提取数据的程序

浏览器请求

  • url
    • 在chrome -- 点检查 -- 点network
    • url = 请求协议+网站域名+资源的路径+参数
  • 浏览器请求url地址
    • 当前url对应的响应+js+css+图片 ------> elements中的内容
  • 爬虫请求url地址
    • 当前的url对应的响应
  • elements的内容和爬虫获取的url地址响应不同,爬虫需要以当前url地址对应的响应为准提取数据
  • 当前URL地址对应的响应在
    • 从network中找到当前url地址 点击response
    • 页面右键显示网页源码

HTTP HTTPS

  • HTTP:超文本传输协议

    • 明文形式传输
    • 效率更高,但不安全
  • HTTPS: HTTP+ SSL(安全套接字层)

    • 传输前数据先加密, 之后解密获取内容
    • 效率较低,但是安全
  • HTTP协议及请求

    • General - 请求参数

      • url地址
      • 请求方式
      • 状态码
    • Response Headers - 响应头

    • Request Headers - 请求头

      • 点 View source

        请求行 -- get -请求方式

      • get请求和post请求的区别

      • get请求没有请求体, post有,get请求把数据放到url地址中

        • post请求常用与登陆注册
        • post请求携带的数据量比get请求大,多,常用语传输打文本的时候
      • 请求头

        1. User-Agent: 用户代理: 对方服务器可以通过user_agent知道当前请求对方资源的是什么浏览器

          ​ 若果我们需要模拟手机版浏览器发送请求 ,对应的就需要把user_agent改成手机版

        2. Cookie: 用于存储用户信息,每次请求携带上发送给对方浏览器

          • 要获取登陆后才能访问的页面
          • 对方服务器回通过cookie判断我们是不是一个爬虫
          • name ----- value
      • 请求体

        • 携带数据
        • get请求没有请求体
        • post有请求体
    • HTTP协议--响应

        1. 响应头

          Set-Cookie: 对方服务通过该字段设置cookie到本地

        1. 响应体

          url地址对应的响应

    • Query String Parameters - 请求参数

requests模块

  1. 安装 --- pip install requests

  2. 发送get post请求 获取响应

    1. response = requests.get(url) # 发送get请求, 请求url对应的响应
    2. response = requests.post(url, data = {请求题的字典}) ## 发送post请求, 请求的url地址对应的响应
  3. response的方法

    1. ​ response.text
      1. 该方式常出现乱码, 原因是编码解码方式不一样,出现乱码使用response.encoding = "utf-8"
    2. response.content.decode()
      1. 把响应的二进制字节流转化为str类型
    3. response.request.url # 发送请求的url地址
    4. response.url # response响应的url地址
    5. response.requset.headers #请求头
    6. response.headers # 响应头
  4. 获取网页源码的正确打开方式(一定可以获取到)

    1. response.content.decode()
    2. response.content.decode(“gbk”)
    3. response.text
    • 直接使用response.content.decode()获取,获取不到的话使用response.content.decode(“gbk”)国标码尝试,如果都获取不到response.text一定可以拿到
  5. 发送带header的请求

    headers = {"User-Agent":" Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
    "Referer":" https://fanyi.baidu.com/?aldtype=16047"}
    
    response = sequests.get(url, headers=headers)
    
    • 当请求网页发现带一个键值对依然不可以请求成功,可以尝试带更多的键值对,这是根据对方服务器的一个判断进行尝试,可以把除了cookie的全部键值对都带这进行尝试,如果依然不可以,把cookie也带着请求 ---- 大部分情况User-Agent足以
  6. 使用超时参数

    1. requests.get(url, headers=headers, timeout=3)
      1. timeout=3 --- 3秒内必须返回响应,否则回报错

​