• Day 05 文本处理和爬虫基础1


    什么是文件

    文件是操作系统提供的一个虚拟概念, 用来存储信息

    什么是文本

    .txt/.word/.md/.py/.xml/.ini 存储的是文字

    如何通过文本编辑器控制.txt文件

    1. 找到文件路径
    2. 打开文件
    3. 读取/修改文件
    4. 保持
    5. 关闭
    file_path = r'C:UsersBlackDocumentsPython learningday 05github.txt'
    f = open(file_path) # 把该路径的文件读入内存,只是没有可视化的界面而已
    data = f.read() # 读取文件(内容)
    
    

    打开文件的三种模式

    r ---> read (只读不可写)

    w ---> write (只写不可读, 清空文本内容)

    a ---> append (只写不可读, 追加)

    file_path = r'C:UsersBlackDocumentsPython learningday 05github.txt'
    
    f = open(file_path, 'a', encoding = 'gbk') # encoding 告诉计算机用什么编码格式翻译硬盘中的0和1
    print('f.readable:', f.readale())
    print('f.writable:', f.writable())
    
    f.write('追加写入')
    
    date = f.read()
    print(data)
    
    

    t和b模式

    gbk/utf8只针对文本,所以音频通过rb模式打开-->读取二进制,b模式下没有encoding这个参数,b不单独使用,一般与r/w/a一起配合使用

    f = open(r'D:上海python12期视频python12期预科班视频day 051 文本处理.mp4','rb')  # 读入内存
    
    data = f.read()
    
    

    t 模式针对文本文件,t模式不单独使用,必读得和r/w/a一起使用

    f = open(r'C:UsersBlackDocumentsPython learningday 05github.txt', 'rt', encoding = 'gbk')
    data = f.read()
    print(data)
    

    高级应用

    r+ 可写可读

    a+ 可写可读

    w+ 可写可读(清空文件)

    使用with open在缩进结束后会自动关闭文件

    with open(r'C:UsersBlackDocumentsPython learningday 05github.txt', 'r+', encoding = 'gbk') as f:
        # 这个缩进内部的代码都是文件打开的状态
        data = f.read
        print(data)
    

    文本处理 + 词云分析

    import jieba
    import wordcloud
    import imageio
    
    # 读取文件内容
    with open(r'C:UsersBlackDocumentsPython learningday 05github.txt', 'r+', encoding = 'gbk') as f:    
        data = f.read()
    
    # 使用结巴对文件内容进行切割
    data_list = jieba.lcut(data)
    data = ' '.join(data_list)
    
    # 将github logo图片读入内存
    img = imageio.imread(r'C:UsersBlackPicturesgithublogo.jpg')
    
    # 使用词运模块生成词云图
    w = wordcloud.WordCloud(background_color= 'white', mask= img, font_path = r'C:WindowsFontssimsun.ttc')
    w.generate(data)
    w.to_file('github.jpg')
    

    效果如下

    爬虫原理

    1. 发送请求 (填入一个url)
    2. 获取数据
    3. 解析数据
    4. 保存数据

    requests模块

    import requests
    res = requests.get(url= '目标网址')
    # 文本
    res.text
    # 二进制流 凡是二进制流数据,不需要指定字符编码
    res.content
    

    re模块

    # re.S 全局搜索
    
    data_list = re.findall(正则匹配规则, 解析内容, re.S)
    
    # 贪婪匹配 .*?  过滤任何内容
    # 非贪婪匹配 (.*?) 提取内容
    

    爬取图片

    # 爬取视觉中国图片
    
    import requests
    # 使用requests.get()发送请求
    response = requests.get(url = 'http://goss.cfp.cn/creative/vcg/nowarter800/new/VCG211235767437.jpg' )
    
    # print(response) 对象
    # 接受二进制流
    # print(response.content)
    
    # 保存数据
    with open('VCG_GET.jpg', 'wb') as f:
        f.write(response.content)
        print('图片下载成功')
    

    爬取视频

    # 爬取二更视频
    
    # 往视频地址发送请求, 获取二进制流
    import requests
    response = requests.get(url= 'http://v1.ergengtech.com/transcode/9c55722e379a9523b51e36f7cd3945cb/2fcc5d2709dd5aa1d03982f040410d6a.mp4')
    
    # 把二进制 流数据保存到本地
    # wb: write + bytes  写二进制流模式
    # 凡是二进制流数据,不需要指定字符编码
    with open('ergen_video.mp4', 'wb') as f:
        f.write(response.content)
        print('视频下载成功')
    

    爬取文本

    # 爬取豆瓣top25电影
    # 电影名称/电影详情链接/低电影评分
    # 1.发送请求
    import requests
    import re
    response = requests.get(url='https://movie.douban.com/top250')
    
    # print(response.text)
    
    # 2.析提取数据
    # 查找所有
    # re.S 全局查找
    # re.findall('正则匹配规则', '解析文本', re.S)
    movie_list = re.findall('<div class="item">.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)人评价</span>', response.text, re.S)
    
    # print(movie_list)
    
    # 循环写入
    
    with open('douban.txt', 'a', encoding='utf-8') as f:
        for line in movie_list:
            movie_name = line[1]
            movie_score = line[2]
            movie_num_of_comm = line[3]
            movie_website = line[0]
            f.write(movie_name + '---' + movie_score + '---' + movie_num_of_comm + '---' + movie_website + '
    ')
        print('文本爬取成功')
    
  • 相关阅读:
    dotnet core 使用 MongoDB 进行高性能Nosql数据库操作
    Google C++测试框架系列:入门
    leetcode解答索引一期工程:1
    Google+团队如何测试移动应用
    Google C++测试框架系列入门篇:第三章 基本概念
    Google C++测试框架系列入门篇:第二章 开始一个新项目
    Google C++测试框架系列高级篇:第二章 让GTest学习打印自定义对象
    Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?
    leetcode: Jump Game II
    Google C++测试框架系列高级篇:第一章 更多关于断言的知识
  • 原文地址:https://www.cnblogs.com/bigb/p/11419636.html
Copyright © 2020-2023  润新知