zoukankan      html  css  js  c++  java
  • day01爬虫三部曲

    一、爬虫的基本原理
    1.什么是爬虫
    爬虫就是爬取数据
    2、什么是互联网
    由一堆网络设备,把一台台计算机互联到一起称之为互联网
    3、互联网建立的目的
    数据的传递与数据共享
    4、什么是数据
    例如:
    电商平台的商品信息
    12306,票务信息
    12306,票务信息
    5、什么是上网
    普通用户:
    打开浏览器---->输入网址
    ----->往目标主机(服务器)发送请求
    ----->返回响应数据
    ----->把数据渲染到浏览器中
    爬虫程序:
    模拟浏览器
    -->往目标主机发送请求
    -->返回响应数据
    -->解析并提取有价值的数据
    -->保持数据(文件写入本地、持久化到数据库)
    6、爬虫的全过程:
    1.发送请求(请求库:Requests/Selenium)
    2.获取响应数据
    3.解析数据(解析库: BeautifulSoup4)
    4.保持数据(存储库:文件保存/MongoDB)
    总结:假如互联网中的数据比喻成一座宝藏,爬虫
    就是在挖去宝藏

    二、Requests请求库
    1.安装与使用
    pip3 install requests
    2.分析请求流程:(模拟浏览器)
    百度:
    1.请求url
    www.baidu.com
    2.请求方式
    get
    post
    3.响应状态码
    '''


    一、请求rul
    http://www.xiaohaur.com/v/
    二、请求方式
    get
    三、请求头信息
    user-agent:用户代理
    '''
    import time
    import requests
    #爬虫三部曲
    # 1.发送请求
    def get_page(url):
    response=requests.get(url)
    return response

    # 2.解析数据
    import re
    def parse_index(html):
    #findall 匹配所有
    #re.findall('正则匹配',‘文本匹配’,'匹配模式')
    #re.S对全部文本进行搜索匹配
    # print(html)
    detail_urls=re.findall(
    '<div class="items"><a class="imglink" href="(.*?)"',
    html,re.S)
    # print(detail_urls)
    # for detail_url in detail_urls:
    # print(detail_url)
    return detail_urls

    #解析详情页
    def parse_detail(html):
    movie_url=re.findall('<source src="(.*?)">',html,re.S)
    #print(movie_url)
    if movie_url:
    return movie_url[0]
    # 3.保存数据
    import uuid
    #uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
    def save_video(content):
    with open(f'{uuid.uuid4()}.mp4','wb')as f:
    f.write(content)
    print('视频下载完毕')
    # main+回车键
    #测试实例
    if __name__ == '__main__':
    for line in range(6):
    url=f'http://www.xiaohuar.com/list-3-{line}.html'
    #发送请求
    response=requests.get(url)
    # print(response)
    # 返回响应状态码
    # print(response.status_code)

    #返回响应文本
    # print(response.text)

    #解析主页页面
    detail_urls=parse_index(response.text)
    # print(detail_urls)

    #循环遍历详情页
    for detail_url in detail_urls:
    # print(detail_url)
    #往每一个详情页发送请求
    detail_res=get_page(detail_url)
    # print(response.text)

    #解析详情页获取视频url
    movie_url=parse_detail(detail_res.text)

    #判断视频url存在则打印
    if movie_url:
    print(movie_url)

    #往视频url发送请求获取视频二进制流
    movie_res=get_page(movie_url)

    #把视频的二进制流传给save_video函数保存到本地
    save_video(movie_res.content)

    '''
    post 请求自动登录github:
    请求URL:
    https://github.com/session
    请求方式:
    post
    请求头:
    cookie
    user-agent:
    请求体:

    '''
    # 1.获取token随机字符串
    '''
    请求URL:
    https://github.com/login
    请求方式:
    get
    请求头:
    cookie
    user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
    2.解析并提取token字符串
    #正则
    '''
    import requests
    import re

    login_url = 'https://github.com/login'
    # login页面的请求头信息
    login_header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
    }
    login_res = requests.get(url=login_url, headers=login_header)
    # print(login_res.text)

    # 解析提取token字符串
    authenticity_token = re.findall(
    '<input type="hidden" name="authenticity_token" value="(.*?)" />',
    login_res.text,
    re.S
    )[0]
    print(authenticity_token)

    #获取login页面的cookies信息
    #print(type(login.res.cookies))
    # print(type(login_res.cookies.get_dict()))
    login_cookies=login_res.cookies.get_dict()

    # 2.开始登录
    '''
    post请求自动登录github
    请求URL:
    https://github.com/session
    请求方式:
    post
    请求头:
    cookie
    user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
    请求体:
    "commit": "Sign in",
    "utf8": "✓",
    "authenticity_token": authenticity_token,
    "login": "sdfasdf",
    "password": "13165465435",
    "webauthn-support": "supported"
    '''
    # session登陆url
    session_url = 'https://github.com/session'

    # 请求头信息
    session_headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
    }

    # 请求体信息
    from_data = {
    "commit": "Sign in",
    "utf8": "✓",
    "authenticity_token": authenticity_token,
    "login": "sdfasdf",
    "password": "13165465435",
    "webauthn-support": "supported"
    }
    session_res=requests.post(url=session_url,
    headers=login_header,
    cookies=login_cookies,
    data=from_data)
    with open('github3.html','w',encoding='utf-8')as f:
    f.write(session_res.text)
  • 相关阅读:
    BZOJ 3527: [Zjoi2014]力 [快速傅里叶变换]
    BZOJ 2194 [快速傅里叶变换 卷积]
    BZOJ 2179 [快速傅里叶变换 高精度乘法]
    [快速傅立叶变换&快速傅里叶变换]【旧 手写笔记】
    CF 235C. Cyclical Quest [后缀自动机]
    BZOJ 1396&&2865 识别子串[后缀自动机 线段树]
    BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster [广义后缀自动机]
    BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 [广义后缀自动机 Trie]
    BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
    BZOJ 3473: 字符串 [广义后缀自动机]
  • 原文地址:https://www.cnblogs.com/2328322824chx/p/11113992.html
Copyright © 2011-2022 走看看