zoukankan      html  css  js  c++  java
  • python-day8爬虫基础之数据存储

    数据存储,在爬虫中也是十分的重要,因为我们要把我们想要的数据保存到本地,其中最简单直接的就是保存为文件文本,比如:TXT、JSON、CSV等等,除此之外,我们还可以将其保存到数据库中,常见的数据库类型有关系型数据库(MySQL)和非关系型数据库(MongoDB、Redis)。今天主要是看着书学习了一下TXT文本存储。

    TXT文本存储的操作比较简单,同样也有一个就是不利于检索,上代码(爬取知乎“发现”页面的热门话题):

    import requests
    from pyquery import PyQuery as pq
    url = 'http://www.zhihu.com/explore'
    headers = {
        'Accept': 'image/webp,image/*,*/*;q=0.8',
        'Accept-Language':'zh-CN,zh;q=0.8',
        'Referer':'https://www.zhihu.com/explore',
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
    }
    html = requests.get(url,headers = headers).text
    # print(html)
    doc = pq(html)
    # print(doc)
    items = doc('.explore-tab .feed-item').items()
    
    
    for item in items:
        question = item.find('h2').text()
        author = item.find('.author-link-line').text()
        answer = pq(item.find('.content').html()).text()
        with open('zhuhu.txt', 'a',encoding='utf-8') as file:
            file.write('
    '.join([question,author,answer]))
            file.write('
    ' + '=' *50 + '
    ')
    print("ok")
    其中,我们主要用到了pyquery解析。还有一个需要解释的就是
    with open('zhihu.txt', 'a',encoding='utf-8') as file:
    中的zhihu.txt就是我们要保存的文件名称和类型,encoding='utf-8就是解码操作,如果不解码,返回的是二进制字符串,是无法正常阅读的,所以我们需要对其进行解码。
    a代表的是以追加方式打开一个文件,如果该文件已经存在,文件指针就会自动放到文件结尾,如果文件不存在,就会创建新的文件来写入。除了a之外,还有几个,下边一一介绍:
    r:以只读方式打开一个文件,文件的指针自动放到文件的开头。
    rb:以二进制只读方式打开一个文件,文件的指针自动放到文件的开头。
    r+:以读写方式打开一个文件,文件的指针自动放到文件的开头。
    rb+:以二进制读写方式打开一个文件,文件的指针自动放到文件的开头。
    w:以写入方式打开一个文件,如果文件已经存在,则将其覆盖,如果文件不存在,则创建新的文件。
    wb:以二进制写入方式打开一个文件,如果文件已经存在,则将其覆盖,如果文件不存在,则创建新的文件。
    w+:以读写方式打开一个文件,如果文件已经存在,则将其覆盖,如果文件不存在,则创建新的文件。
    ab:以二进制追加方式打开一个文件,如果文件已经存在,则文件指针会放在文件结尾,如果有新的内容,会写入到已有内容的后边;如果文件不存在,则创建新的文件。
    a+:以读写方式打开一个文件,如果文件已经存在,则文件指针会放在文件结尾,文件打开时会是追加模式,如果文件不存在,则创建新的文件。
    ab+:以二进制追加方式打开一个文件。如果文件已经存在,则文件指针将会放在文件结尾,如果文件不存在,则创建新文件用于读写。
  • 相关阅读:
    scanf()常犯错误
    C语言,链表反转
    c语言: 冒泡排序
    判断一个数是否为2的若干次幂
    计算一个整数中含1的个数
    ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)
    Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
    Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
    Linux下进程的创建过程分析(_do_fork do_fork详解)--Linux进程的管理与调度(八)
    Linux下2号进程的kthreadd--Linux进程的管理与调度(七)
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/9462163.html
Copyright © 2011-2022 走看看