“使用pandas保存豆瓣短评数据”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据。 ==保存数据的方法=…”)
 
实战环节
 
第96行: 第96行:
 
from lxml import etree
 
from lxml import etree
  
 +
#爬取评论
 
url = 'https://book.douban.com/subject/1084336/comments/'
 
url = 'https://book.douban.com/subject/1084336/comments/'
 
r = requests.get(url).text
 
r = requests.get(url).text
第102行: 第103行:
 
file = s.xpath('//div[@class="comment"]/p/span/text()')
 
file = s.xpath('//div[@class="comment"]/p/span/text()')
  
 +
#评论转换为字典
 
import pandas as pd
 
import pandas as pd
df = pd.DataFrame(file)
+
 
df.to_excel('pinglun.xlsx')</nowiki>
+
num = 0
 +
aDict ={}
 +
for i in file:
 +
    aDict[num] = str(i)
 +
    #print(aDict[num])
 +
    num += 1
 +
 
 +
#字典存储进DataFrame
 +
df = pd.DataFrame.from_dict(aDict, orient='index')
 +
print(df)
 +
 
 +
#由DataFrame写入Excel
 +
writer = pd.ExcelWriter('pinglun2.xlsx')
 +
df.to_excel(writer,'Sheet1',encoding='utf-8')
 +
writer.save()
 +
 
 +
 
 +
</nowiki>
  
 
注意:如果运行以上程序出现ImportError: No module named ‘openpyxl’错误,那么需要先安装“openpyxl”模块。
 
注意:如果运行以上程序出现ImportError: No module named ‘openpyxl’错误,那么需要先安装“openpyxl”模块。
  
  
课后作业
+
==课后作业==
 +
 
 +
* 使用csv保存数据,了解更多的操作
 +
* 学习如何使用造数
 +
* 思考如何在Python爬虫中翻页
 +
 
 +
*参考代码:爬取《小王子》豆瓣短评前5页的短评数据
 +
 
 +
  <nowiki>import requests
 +
from lxml import etree
 +
import pandas as pd
  
        使用csv保存数据,了解更多的操作
+
urls=['https://book.douban.com/subject/1084336/comments/hot?p={}'.format(str(i)) for i in range(1, 6, 1)]
        学习如何使用造数
+
#通过观察的url翻页的规律,使用for循环得到5个链接,保存到urls列表中
        思考如何在Python爬虫中翻页
 
  
         参考代码:爬取《小王子》豆瓣短评前5页的短评数据
+
num = 0
 +
aDict ={} #初始化用于保存短评的字典
 +
for url in urls: #使用for循环分别获取每个页面的数据,保存到pinglun列表
 +
    r = requests.get(url).text
 +
    s = etree.HTML(r)
 +
    file = s.xpath('//div[@class="comment"]/p/span/text()')
 +
    for i in file:
 +
         aDict[num] = str(i)
 +
        #print(aDict[num])
 +
        num += 1
 +
   
  
        import requests
+
#df = pd.DataFrame(pinglun) #把pinglun列表转换为pandas DataFrame
        from lxml import etree
+
#df.to_excel('pinglun4.xlsx') #使用pandas把数据保存到excel表格
        import pandas as pd
 
  
        urls=['https://book.douban.com/subject/1084336/comments/hot?p={}'.format(str(i)) for i in range(1, 6, 1)] #通过观察的url翻页的规律,使用for循环得到5个链接,保存到urls列表中
+
#字典存储进DataFrame
 +
df = pd.DataFrame.from_dict(aDict, orient='index')
 +
print(df)
  
        pinglun = [] #初始化用于保存短评的列表
+
#由DataFrame写入Excel
        for url in urls: #使用for循环分别获取每个页面的数据,保存到pinglun列表
+
writer = pd.ExcelWriter('pinglun4.xlsx')
            r = requests.get(url).text
+
df.to_excel(writer,'Sheet1',encoding='utf-8')
            s = etree.HTML(r)
+
writer.save()
            file = s.xpath('//div[@class="comment"]/p/span/text()')
+
</nowiki>
            pinglun = pinglun + file
 
  
        df = pd.DataFrame(pinglun) #把pinglun列表转换为pandas DataFrame
 
        df.to_excel('pinglun.xlsx') #使用pandas把数据保存到excel表格
 
  
        思考一下,以上代码还有什么更加简洁的写法
+
思考一下,以上代码还有什么更加简洁的写法
  
补充知识
+
==补充知识==
  
    阅读csv模块官方文档,了解使用csv模块保存数据的方法
+
*阅读[https://docs.python.org/2/library/csv.html csv模块官方文档],了解使用csv模块保存数据的方法
    可以前往一译中文文档,获取到Python安装包的中文文档,学习起来更加流畅
+
*可以前往[http://python.usyiyi.cn/ 一译中文文档],获取到Python安装包的中文文档,学习起来更加流畅
    在pandas官方文档中可以查看到pandas全面的用法
+
*在[http://pandas.pydata.org/pandas-docs/stable/ pandas官方文档]中可以查看到pandas全面的用法
    在10分钟了解pandas中可以快速了解和学习pandas的基本操作
+
*在[http://pandas.pydata.org/pandas-docs/stable/10min.html 10分钟了解pandas]中可以快速了解和学习pandas的基本操作
    阅读pandas读取和储存数据,学习使用pandas读取和储存数据的更多详细操作
+
*阅读[http://pandas.pydata.org/pandas-docs/stable/io.html pandas读取和储存数据],学习使用pandas读取和储存数据的更多详细操作

2019年6月8日 (六) 07:34的最新版本

本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据。

保存数据的方法

  • open函数保存
  • pandas包保存(本节课重点讲授)
  • csv模块保存
  • numpy包保存

使用open函数保存数据

open函数用法

使用with open()新建对象

写入数据

import requests
        from lxml import etree

        url = 'https://book.douban.com/subject/1084336/comments/'
        r = requests.get(url).text

        s = etree.HTML(r)
        file = s.xpath('//div[@class="comment"]/p/span/text()')

        with open('pinglun.txt', 'w', encoding='utf-8') as f: #使用with open()新建对象f
           for i in file:
               print(i)
               f.write(i) #写入数据,文件保存在当前工作目录

可以使用以下方法得到当前工作目录或者修改当前工作目录

import os
        os.getcwd()#得到当前工作目录
        os.chdir()#修改当前工作目录,括号中传入工作目录的路径

open函数的打开模式

   参数 	用法
   r 	只读。若不存在文件会报错。
   w 	只写。若不存在文件会自动新建。
   a 	附加到文件末尾。
   rb, wb, ab 	操作二进制
   r+ 	读写模式打开

使用pandas保存数据

Python数据分析的工具包

numpy: (Numerical Python的简称),是高性能科学计算和数据分析的基础包

pandas:基于Numpy创建的Python包,含有使数据分析工作变得更加简单的高级数据结构和操作工具

matplotlib:是一个用于创建出版质量图表的绘图包(主要是2D方面)

常见的导入方法:

       import pandas as pd #导入pandas
       import numpy as np #导入numpy
       import matplotlib.pypolt as plt #导入matplotlib

注意:pandas 、numpy和matplotlib都需要事先安装

pandas保存数据到Excel

  • 导入相关的库
  • 将爬取到的数据储存为DataFrame对象(DataFrame 是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量)
       to_excel() 实例方法:用于将DataFrame保存到Excel
       df.to_excel('文件名.xlsx', sheet_name = 'Sheet1') #其中df为DataFrame结构的数据,sheet_name = 'Sheet1'表示将数据保存在Excel表的第一张表中
       read_excel() 方法:从excel文件中读取数据
       pd.read_excel('文件名.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

pandas保存数据到csv文件

  • 导入相关的库
  • 将数据储存为DataFrame对象
  • 保存数据到csv文件
 import pandas as pd
        import numpy as np
        df = pd.DataFrame(np.random.randn(6,3)) #创建随机值并保存为DataFrame结构
        print(df.head())
        df.to_csv('numpppy.csv') #保存中文时要更改编码格式:encoding='gbk',或者其他格式


实战环节

结合之前学习的获取数据、解析数据的知识,爬取《小王子》豆瓣短评的数据,并把数据保存为本地的excel表格

import requests
from lxml import etree

#爬取评论
url = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).text

s = etree.HTML(r)
file = s.xpath('//div[@class="comment"]/p/span/text()')

#评论转换为字典
import pandas as pd

num = 0
aDict ={}
for i in file:
    aDict[num] = str(i)
    #print(aDict[num])
    num += 1

#字典存储进DataFrame
df = pd.DataFrame.from_dict(aDict, orient='index')
print(df)

#由DataFrame写入Excel
writer = pd.ExcelWriter('pinglun2.xlsx')
df.to_excel(writer,'Sheet1',encoding='utf-8')
writer.save()



注意:如果运行以上程序出现ImportError: No module named ‘openpyxl’错误,那么需要先安装“openpyxl”模块。


课后作业

  • 使用csv保存数据,了解更多的操作
  • 学习如何使用造数
  • 思考如何在Python爬虫中翻页
  • 参考代码:爬取《小王子》豆瓣短评前5页的短评数据
 import requests
from lxml import etree
import pandas as pd

urls=['https://book.douban.com/subject/1084336/comments/hot?p={}'.format(str(i)) for i in range(1, 6, 1)]
#通过观察的url翻页的规律,使用for循环得到5个链接,保存到urls列表中

num = 0
aDict ={} #初始化用于保存短评的字典
for url in urls: #使用for循环分别获取每个页面的数据,保存到pinglun列表
    r = requests.get(url).text
    s = etree.HTML(r)
    file = s.xpath('//div[@class="comment"]/p/span/text()')
    for i in file:
        aDict[num] = str(i)
        #print(aDict[num])
        num += 1
    

#df = pd.DataFrame(pinglun) #把pinglun列表转换为pandas DataFrame
#df.to_excel('pinglun4.xlsx') #使用pandas把数据保存到excel表格

#字典存储进DataFrame
df = pd.DataFrame.from_dict(aDict, orient='index')
print(df)

#由DataFrame写入Excel
writer = pd.ExcelWriter('pinglun4.xlsx')
df.to_excel(writer,'Sheet1',encoding='utf-8')
writer.save()


思考一下,以上代码还有什么更加简洁的写法

补充知识