Python爬虫初级(6):xlwt保存数据

1、概念

  • xlwt为Python操纵Excel的库,具有数据添加、删除、修改等功能,是较为轻量但专一的Excel数据操作库,主要对.xls类型的文件进行操作。
  • 读者也可使用pandas、openpyxl等库进行操作,不过这些库更“重”,它们的使用往往伴随着数据分析方向的应用,在此不做演示。

2、安装

pip install xlwt

3、代码

  • 还是延续前章,以爬取豆瓣Top250电影网站电影名为例,同时用到了BeautifulSoup、requests、datetime(与时间相关操作)库。

  • 导包:

from bs4 import BeautifulSoup
import requests
import xlwt
import datetime as dt
  1. 定义需要爬取的链接以及headers,其中如下的urls定义可创建一个包含每一页(每一页包含25部电影,故步长为25)url的列表。
urls = ['https://movie.douban.com/top250?start={}'.format(str(i)) for i in range(0, 250, 25)]
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
  1. 获取当前时间,作为备用Excel文件名。其中.strftime()为时间格式控制,%F为“年-月-日”格式。
time = dt.datetime.now().strftime('%F')
  1. 创建Excel文件与表单,设置第一列列宽为6400像素,并定义一个格式控制变量n。
book = xlwt.Workbook(encoding='UTF-8')
sheet1 = book.add_sheet('sheet1', cell_overwrite_ok=True)
sheet1.col(0).width = 6400
n = 0
  • cell_overwrite_ok=True表示可对同一单元格进行重复操作,虽此例中并不进行重复操作,但加上可减少出乎意料的报错←_←。
  • xlwt中列宽的值表示方法:默认字符的1/256为衡量单位,一个汉字占两个字符即512个单位,一个字母占一个字符即256个单位。
  1. 使用for循环对urls列表中每一页链接进行访问并爬取电影名,并定义一个格式控制变量m。在上述for循环中,使用第二个for循环,将电影名写入表单的单元格中(拟定从第一行第一列开始,向下写入电影名)。
for url in urls:
    wb_data = requests.get(url,headers=headers)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    titles = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')
    m = 0
    for title in titles:
        sheet1.write(m+n, 0, title.get_text())
        m = m + 1
    n = n + 25
  • sheet1.write(x, y, z): x为行下标,y为列下标,z为写入内容。
  • n与m的设置逻辑,主要是为了数据的正确写入,依次写入第一列的前250行单元格。注意n与m的逻辑
  1. 保存Excel文件,文件名用到开头定义的时间。
book.save('读者保存路径\{}豆瓣TOP250电影.xls'.format(time))
  1. 最后将上述代码封装至函数中。
  • 完整代码如下:
from bs4 import BeautifulSoup
import requests
import xlwt
import datetime as dt

urls = ['https://movie.douban.com/top250?start={}'.format(str(i)) for i in range(0, 250, 25)]
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}

time = dt.datetime.now().strftime('%F')

def get_tops():
    book = xlwt.Workbook(encoding='UTF-8')
    sheet1 = book.add_sheet('sheet1', cell_overwrite_ok=True)
    sheet1.col(0).width = 6400
    # xlwt中列宽的值表示方法:默认字符的1/256为衡量单位,一个汉字占两个字符即512个单位,一个字母占一个字符即256个单位
    n = 0
    for url in urls:
        wb_data = requests.get(url,headers=headers)
        soup = BeautifulSoup(wb_data.text, 'lxml')
        titles = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')
        m = 0
        for title in titles:
            sheet1.write(m+n, 0, title.get_text())
            m = m + 1
        n = n + 25
    book.save('读者保存路径\{}豆瓣TOP250电影.xls'.format(time))

if __name__=='__main__':
    get_tops()
  • Excel电影数据如下:
    共250行

4、总结

  • xlwt是针对Excel操作的库,此外还有xlrd库用于读取数据等。
  • xlwt对.xlsx类型的文件进行操作可能会存在一些问题,目前多对.xls文件进行操作。
  • 学如逆水行舟,不进则退!
  • (ง •̀-•́)ง
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一北DMY

感谢大大给萌新的打赏!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值