zoukankan      html  css  js  c++  java
  • 爬虫基础简介

    一:爬虫简介

    (1)图解:

     (2)互联网

    1:什么是互联网

    (1)互联网由pc 网线 交换机 路由器 防火墙互连在一起 连接成一张网状的样式

    2:互联网建立的目的

    (1) 互联网建立的核心价值 --->数据共享以及传递

    (2)互联网建立就是为了将彼此连接在一起使其逻辑跨越空间的限制 ---> 可以实现数据的共享传递

    3:什么是上网

    (1)作为客户端浏览器向服务端发送请求

    (2)服务端接收到客户端的数据请求 进行数据查找 返回给客户端

    (3)客户端接收到服务端的数据 进行渲染等

    4:爬虫

    (1)模拟客户端的请求(浏览器的请求)向服务端发送请求

    (2)获取服务端返回的数据

    (3)筛选我们所需要的数据

    (4)将筛选结果保存

    PS:

    (1)如果将互联网比作一张大网

    (2)那么一台计算机上的数据便相当于一个个猎物

    (3)爬虫程序相当于猎人 在互联网上获取猎物

     二:爬虫的基本流程

    1:图解

     2:数据请求

    (1)使用http通过request向目标网站发送请求

    (2)请求携带一系列http协议所需要的参数

    (3)请求头 请求体等等

    3:数据回复

    (1)如果服务端接受请求并进行回复

    (2)得到response回复 包含html代码 文本 图片 视频等等

    4:数据解析

    (1)正则表达式 ---> 匹配我们所需要的信息

    (2)解析html数据库 ---> Beautifulsoup pyquery等

    (3)解析json数据 ---> json模块

    (4)解析二进制  ---> 以wb的模式读取文件

    5:数据存储

    (1)以文本的形式

    (2)数据库

     三:请求与响应

    1:图例

     2:图解

    (1)客户端通过http协议向服务端发送请求

      例如:https://www.cnblogs.com/SR-Program/

    (2)request:用户通过浏览器(socket client)向服务端(socket server)发送请求

    (3)response:接受并分析request的请求参数 进行相应的数据回复(文本 图片 视频等)

    (4)存储:在接收到response之后进行数据筛选 对筛选之后的数据进行保存等 

    四:request模块简介

    1:常用请求库 测试网站:http://httpbin.org/get

    2:request

    (1)安装

    pip install requests

     (2)get请求

    (3)常见的请求参数

    1:cookie 

    (1)保存用户状态 校验用户

    (2)一串散列值

    2:Host 

    (1)一般为域名

    3:referer

    (1)表示从哪里来

    4:User-agent

    (1)标识用户的浏览器等

    五:request使用方式

     (1)get请求

    '''
    响应对象 = requests.get(......)

    **参数:**

    url:请求地址

    headers = {} 请求头携带的参数

    cookies = {} cookie携带的参数 也可以加入headers中

    params = {} get携带的参数

    proxies = {'http':‘http://端口:ip’} 验证网站是否使用代理

    timeout = 0.5 防止访问时间过长 照成假死

    allow_redirects = False # 禁止重定向
    '''

     (2)post请求

    '''
    
    响应对象 = requests.get(......)
    
    **参数:**
    
    url:请求地址
    
    headers = {} 请求头携带的参数
    
    cookies = {} cookie携带的参数 也可以加入headers中
    
    json = {} 上传json格式的数据
    
    files = {‘file’:open(...,‘rb’)} 上传文件
    
    data = {} post携带数据
    
    timeout = 0.5 防止访问时间过长 照成假死
    
    allow_redirects = False  # 禁止重定向
    
    '''

    (3)响应参数

    '''
    r.url    获取请求的url
    
    r.text        获取相应文本信息
    
    r.encoding = 'gbk'   
    
    r.content   二进制
    
    r.json()    json.loads(r.text)
    
    r.status_code   响应状态码
    
    r.headers      响应头
    
    r.cookies    响应cookie(set——cookie)
    
    r.history   响应对象
    
    '''
    url = "http://www.aa7a.cn/user.php"   # 请求的url地址
    headers = {
        "Referer": "http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2Findex.php",
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
    }  # 请求头
    data = {
        "username": "11401339@qq.com",
        "password": "123..",
        "captcha": "txgk",  # 验证码
        "remember": "1",
        "ref": "http://www.aa7a.cn/index.php",
        "act": "act_login",
    }  # post提交的数据
    res = requests.post(
        url=url,
        headers=headers,
        data=data
    
    )
    cookies = res.cookies.get_dict()  # cookies存入get_dict中 获取cookie
    
    
    # 获取cookies向主页发起请求
    res1 = requests.get(
        'http://www.aa7a.cn/',
        headers=headers,
        cookies=cookies,
    )
    if "11401339@qq.com" not in res1.text:
        print("爬取失败")
    else:
        print("爬取成功")
    模拟登录
    import requests
    import re
    
    url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=24"
    
    res = requests.get(url=url)
    
    
    # <a href="video_1625984" class="vervideo-lilink actplay"> 进入跳转到视频页面
    
    reg_text = '<a href="(.*?)" class="vervideo-lilink actplay">'   # 正则匹配我们所需要的连接
    
    res1 = re.findall(reg_text,res.text)
    # print(res1)    # 获取一个个连接存入在列表中
    
    for url in res1:
        url = 'https://www.pearvideo.com/'+url   # 获取进入视频连接的地址的页面
        # srcUrl="https://video.pearvideo.com/mp4/adshort/20191125/cont-1626153-14629209_adpkg-ad_hd.mp4" 真正的向后端请求视频连接
        res2 = requests.get(url=url)
        # res3 = re.findall("srcUrl='(.*?)'",res2.text)      # 获取ship连接
        res3 = re.findall('srcUrl="(.*?)"', res2.text)[0]  # 存放在列表中 获取出来视频地址
        print(res3)
        name = res3.rsplit('/', 1)[1]    # 获取存放的路径
        res4 = requests.get(res3)      # 爬取一个个视频连接地址
        with open(name, 'wb') as f:
            for line in res4.iter_content():   # 循环打印 
                f.write(line)
    爬取梨视频网站

    PS:

    (1)post与get参数都会形成key=value&key=value的形式

    (2)get直接拼接在url中

    (3)post则在formdata中

    六:总结

    #1、总结爬虫流程:
        爬取--->解析--->存储
    
    #2、爬虫所需工具:
        请求库:requests,selenium
        解析库:正则,beautifulsoup,pyquery
        存储库:文件,MySQL,Mongodb,Redis
    
    #3、爬虫常用框架:
        scrapy
  • 相关阅读:
    计算机网络实验之Wireshark_DNS
    计算机网络自顶向下配套资源
    MOS_Chapter2_Process And Thread
    Leetcode 23. 合并K个升序链表
    MOS_Chapter1_Introduction
    Leetcode的开门大吉
    hexo和gitee搭建免费个人博客详细教程
    第三章 模型搭建和评估-评估
    第三章 模型搭建和评估--建模
    第二章:第四节数据可视化
  • 原文地址:https://www.cnblogs.com/SR-Program/p/11927711.html
Copyright © 2011-2022 走看看