zoukankan      html  css  js  c++  java
  • 爬虫基本原理

    一、爬虫基础简介必备知识

    三种爬虫方式

    ​ 通用爬虫: 抓取系统重要组成部分,获取的是整张页面数据
    ​ 聚焦爬虫: 建立在通用爬虫之上,抓取页面指定的局部内容
    ​ 增量式爬虫: 检测网站数据更新的情况,只抓取更新出来的数据

    **robots.txt协议: 君子协议,规定网站哪些数据可不可爬
    **http协议: 服务器和客户端进行数据交互的一种形式。

    https协议: 安全的超文本传输协议(证书秘钥加密))

    请求头:

    • User-Agent: 请求载体的身份标识

    • Connection: 请求完毕后,是否断开连接或者保存连接

    响应头:

    • content-Type: 服务器响应回客户端的数据类型

    加密方式:

    • 对称秘钥加密
    • 非对称秘钥加密
    • 证书秘钥加密

    二、爬虫的基本流程(四步曲)

    发送请求 ---> 获取响应内容 ---> 解析内容 ---> 保存数据

    1.发送请求: 向目标站点发送一个Request, Request包含了请求头,请求体等参数

    2.获取响应内容: 服务器响应回来的Response,包含了html,json,图片等数据

    3.解析内容: 解析Response数据。(正则,第三方库。。。)

    4.保存数据: Mysql ,本地文件file,MongoDB,Redis。。。

    三、Request

    1.请求方式:
    GET,POST,HEAD,PUT,DELETE,OPTHONS。。。
    GET请求携带的参数拼接在url,POST请求携带的参数放在请求体内,存放在form data

    2.请求url:
    url全称统一资源定位符 https://www.baidu.com/s?wd=靓仔
    中文·靓仔·会被解码

    3.请求头:
    User-agent:告诉它这是浏览器发过来的请求(请求头中如果没有user-agent客户端配置,服务端可能将你当做一个非法用户)务必加上
    host:
    cookies:cookie用来保存登录信息
    Referer:上一次的跳转路径
    一般做爬虫都会加上请求头

    4.请求体:
    如果是get方式,请求体没有内容
    如果是post方式,请求体是format data
    ps:
    1、登录窗口,文件上传等,信息都会被附加到请求体内
    2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post

    请求例子一:

    import requests
    from urllib.parse import urlencode
    # 请求方式
    kwords = input('请输入关键字:>>>').strip()
    res = urlencode({'wd': kwords})  # 使用urlencode可以解析中文
    url = "https://www.baidu.com/s?" + res
    # 请求头
    baidu_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 chrome-extension",
    }
    # 发送请求
    response = requests.get(url, headers=baidu_headers)
    print(response.status_code)  # 响应状态码
    print(response.text)   # 返回的html
    
    # 保存数据
    with open('search.html', 'w', encoding='utf-8') as f:
        f.write(response.text)
        print('保存成功')
    

    实例二:

    import requests
    # 请求方式
    kwords = input('请输入关键字:>>>').strip()
      # 使用urlencode可以解析中文
    url = "https://www.baidu.com/s?"
    params = {'wd': kwords}
    # 请求头
    baidu_headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 chrome-extension",
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    }
    # 发送请求
    response = requests.get(url,
                            params=params,
                            headers=baidu_headers,
                            )
    print(response.status_code)  # 响应状态码
    # print(response.text)   # 返回的html
    
    # 保存数据
    with open('search1.html', 'w', encoding='utf-8') as f:
        f.write(response.text)
        print('保存成功')
    
  • 相关阅读:
    数据挖掘实践(34):实战--高潜用户购买画像(三)特征工程
    数据挖掘实践(33):实战--高潜用户购买画像(二)EDA/探索性数据分析
    数据挖掘实践(32):实战--高潜用户购买画像(一)数据清洗
    Java 流程控制 之 顺序结构
    Java 之 运算符
    Java 之 变量
    Handmade Rust Part 1: Introduction & Allocators
    rust 强制转换
    引用与借用
    candidate #1: `std::clone::Clone`
  • 原文地址:https://www.cnblogs.com/guapitomjoy/p/12121701.html
Copyright © 2011-2022 走看看