zoukankan      html  css  js  c++  java
  • Python爬虫之数据存储(无数据库版)


    PythonHTML正文抽取后存储为两种格式:JSONCSV

    一、存储为JSON

    PythonJSON文件的操作分为编码和解码,通过JSON模块来实现。编码过程是把Python对象转换成JSON对象的一个过程,常用的两个函数是dumpsdump函数。两个函数的唯一区别就是dumpPython对象转换成JSON对象,并将JSON对象通过fp文件流写入文件中,而dumps则是生成了一个字符串。

    dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

    dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)


    常用参数分析:

    Skipkeys默认值是False,如果dictkeys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key

    ensure_ascii:当它为True的时候,所有非ASCII码字符显示为uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。)

    indent应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,否则会换行且按照indent的数值显示前面的空白分行显示,这样打印出来的json数据也叫pretty-printed json

    separators分隔符,实际上是(item_separator,dict_separator)的一个元组,默认的就是(',',':');这表示dictionarykeys之间用“,”隔开,而KEYvalue之间用“:”隔开。

    encoding默认是UTF-8,设置json数据的编码方式。

    sort_keys将数据根据keys的值进行排序。


    例如:抽取盗墓笔记(http://seputu.com/)的标题,存放在/home/demo.json文件中

    from bs4 import BeautifulSoup

    import requests

    import json

    user_agent = 'Mozilla/4.0 (compatible;MSIE 5.5;Window NT)'

    headers = {'User-Agent':user_agent}

    r = requests.get('http://seputu.com/',headers=headers)

    #print(r.text)

    soup = BeautifulSoup(r.text,'html.parser')

    content = []

    for mulu in soup.find_all(class_="mulu"):

    h2 = mulu.find('h2')

    if h2 != None:

    h2_title = h2.string #获取标题

    list = []

    for a in mulu.find(class_='box').find_all('a'): #获取所有的a标签中url和章节内容

    href = a.get('href')

    box_title = a.get('title')

    list.append({'href':href,'box_title':box_title})

    content.append({'title':h2_title,'content':list})


    with open('/home/demo.json,'w') as fp:

    json.dump(content,fp=fp,ensure_ascii=False,indent=4)

     

     

    二、存储为CSV

    CSVComma-Separated Values,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

    CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

    特点

    • 读取出的数据一般为字符类型,如果是数字需要人为转换为数字

    • 以行为单位读取数据

    • 列之间以半角逗号或制表符为分隔,一般为半角逗号

    • 一般为每行开头不空格,第一行是属性列,数据列之间以间隔符为间隔无空格,行之间无空行。

    1Python使用csv库来读写CSV文件,需要用到Writer对象:

    1)写入CSV文件:

    import csv

    headers = ['ID','UserName','Password','Age','Country']

    rows = [(1001,'aa','123',24,'中国'),

           (1002,'bb','111',25,'美国'),

           (1003,'cc','222',26,'德国'),

          ]

    with open('/home/demo.csv','w') as f:

        f_csv = csv.writer(f)

        f_csv.writerow(headers)

        f_csv.writerow(rows)


    2)读取CSV文件:

    with open('/home/demo.csv') as f:

          f_csv = csv.reader(f)

          headers = next(f_csv)

          print(headers)

          for row in f_csv:

               print(row)


  • 相关阅读:
    计算两个时间相差几个月
    批量生成二维码
    PHP实现二维数组(或多维数组)转换成一维数组
    任意二维数组转换成一维数组
    企业微信的使用与公众号以及其它几个应用的使用方式都是一致的
    判断字符类型
    insert一个表的数据到另外一个表
    同步a表的数据到 b表
    PHP Curl Accept-Encoding: gzip乱码问题解决
    spring boot入门程序
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10885494.html
Copyright © 2011-2022 走看看