python爬虫文件保存到xlsx和从xlsx提取数据

从Excel提取数据信息

假设下面有这个数据,把它提取出来

                                                                                                                                                 图一

 一个execl文件一般都至少有一个table,图中的Sheet1就表示一个table

   图二

 调用xlrd库从Excel中提取数据(“xlrd”是E x ce lr ea d 的缩写)

xlrd.open_workbook(path)打开工作表格,即打开一个Excel表,path为Excel文件的路径

(1)xls.sheets()[索引]

(2)xls.sheet_by_index(索引)

(3)xls.sheet_by_name(sheet名称)

(1,2)索引从 0 开始,对应sheet1、sheet2、sheet3(如图一sheet)

(3)此前提是知道表格中的sheet名称

(1)sheet.nrows

(2)sheet.ncols

获取行列
sheet.row(n)获取第 n 行的数据
sheet.row_slice(n)获取第 n 行的数据,其中 n 为行数,从 0 开始,返回该行所有单元格数据组成的列表。
sheet.row_values(rowx = n, start_colx = x, end_colx = y)

获取行n,列x到y

sheet.row_values(n,x,y)返回获取的数据组成的列表。

sheet.cell(rowx = n, colx = m)获取第 n 行,第 m 列对应的单元格数据(返回的是单元格类型数据,要想获取数据本身,可以使用sheet.cell(n, m).value)。
sheet.cell_type(rowx = n, colx = m)获取第 n 行,第 m 列对应的单元格数据类型。
sheet.cell_value(rowx = n, colx = m)获取第 n 行,第 m 列对应的单元格数据。

爬取豆瓣Top250电影表的信息

import  xlrd
table=xlrd.open_workbook(r'C:\Users\milk\Desktop\练习.xls')
sheet_name=table.sheet_names()[0]
#第一个表格的名字
sheet=table.sheets()[0]
#第一个表格
print(sheet_name)
print(sheet)
rows=sheet.nrows
#获取表格有几行
for i in range(rows):
    data=sheet.row_values(i,0,None)
    print("{}表格中第{}行的数据为:{}".format(sheet_name,i,data))

 运行结果:

 数据存入Excel

调用xlwt库从Excel中提取数据(“xlrd”是E x ce lw ri t e 的缩写)

 

其中有几点注意的地方:

1、存入数据用到xlwt库,先建立一个工作簿

f=xlwt.Workbook(encoding='gbk')

2、工作簿没有write函数,只能建立一个sheet,然后通过sheet.write(行,列,数据)

print(sheet)
<xlwt.Worksheet.Worksheet object at 0x0000022CF6F192A0>

3、还要保存到工作簿

f.save(r'D:\kj\豆瓣Top250电影.xlsx')
def write_into(name_list, info_list, rate_list):
    f=xlwt.Workbook(encoding='gbk')
    sheet= f.add_sheet(u'top250', cell_overwrite_ok=True)
    rowTitle = [u'电影名字', u'电影评分', u'电影信息']
    for i in range(3):
        sheet.write(0,i,rowTitle[i])
    #with open("D:\kj\豆瓣Top250电影.xlsx", "r", encoding="utf-8") as f:
    for i in range(1,251):
        #f.write(name_list[i]+ '    评分:'+ rate_list[i]+'   ' + info_list[i] +'\n\n')
        sheet.write(i,0,name_list[i-1])
        sheet.write(i,1,rate_list[i-1])
        sheet.write(i,2,info_list[i-1])
    f.save('D:\kj\豆瓣Top250电影.xlsx')

完整代码如下:

import xlwt
import requests
from bs4 import BeautifulSoup

def url_open(url):  # 打开每个地址
    #添加header,伪装成浏览器
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
    res = requests.get(url, headers=headers)
    return res

# 创建三个储存信息的列表
name_list = []
info_list = []
rate_list = []

#获取电影名字
def get_name(soup, name_list):
    targets = soup.find_all("div", class_="hd")
    for each in targets:
        name_list.append(each.a.span.text)

#获取电影信息
def get_info(soup, info_list):
    targets = soup.find_all("div", class_='bd')
    for each in targets:
        try:
            info_list.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())
        except:
            continue
#获取电影评分
def get_rate(soup, rate_list):
    targets = soup.find_all("span", class_="rating_num")
    for each in targets:
        rate_list.append(each.text)

#将获取信息写入xlsl文件
def write_into(name_list, info_list, rate_list):
    f=xlwt.Workbook(encoding='gbk')
    sheet= f.add_sheet(u'top250', cell_overwrite_ok=True)
    print(sheet)
    rowTitle = [u'电影名字', u'电影评分', u'电影信息']
    for i in range(3):
        sheet.write(0,i,rowTitle[i])
    #with open("D:\kj\豆瓣Top250电影.xlsx", "r", encoding="utf-8") as f:
    for i in range(1,251):
        #f.write(name_list[i]+ '    评分:'+ rate_list[i]+'   ' + info_list[i] +'\n\n')
        sheet.write(i,0,name_list[i-1])
        sheet.write(i,1,rate_list[i-1])
        sheet.write(i,2,info_list[i-1])
    f.save(r'D:\kj\豆瓣Top250电影.xlsx')


def main():
    #遍历每个页面链接并获取信息
    url = []
    for i in range(10):  # 得到十个页面地址
        url.append("https://movie.douban.com/top250?start=(i*25)&filter=" )

    for each_url in url:
        res = url_open(each_url)
        soup = BeautifulSoup(res.text, "html.parser")
        get_name(soup, name_list)
        get_info(soup, info_list)
        get_rate(soup, rate_list)

    write_into(name_list, info_list, rate_list)

if __name__ == "__main__":
    main()





  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值