python爬虫小实践:将爬取的数据以csv或excl格式保存(2)


发布时间:2020-02-23 15:34    作者: Uncle Hui   已过去:5 月,2 周   阅读总量:270 已被赞:2


新建一个py 文件,写一个保存数据的类,也可以不新建,个人习惯

class Bibi_top100():

    def __init__(self,title,top_num,rank,view_counts,up_name,up_id,url):
        self.title = title
        self.top_num = top_num
        self.rank = rank
        self.view_counts = view_counts
        self.up_name = up_name
        self.up_id = up_id
        self.url = url
    #生成一条一条的list数据
    def save_data(self):
        return [self.top_num,self.title,self.up_name,self.up_id,self.rank,self.view_counts,self.url]
    @staticmethod #静态方法
    def csv_title():
        return ['排名','视频标题','up主名','upID','视频得分','播放量','url']

爬虫代码py里 引入

# 爬取哔哩哔哩热门视频排行榜
import datetime
import csv
import requests #python3.6 内置
from bs4 import BeautifulSoup  #没有就安装:pip3 install beautifulsoup4

from blog.cvs_python import Bibi_top100 #引入模型类

#爬取目标网址
url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3'

#获取目标html内容
data_html = requests.get(url).text

 

#BeautifulSoup可以将html内容解析处理 'html.parser' 告诉它是什么类型
soup = BeautifulSoup(data_html,'html.parser')

 

#获取所有的li
#find_all 找到所有的li标签,但是有些li比标签不是我们需要的,观察发现
#这些需要的li标签的class都是rank-item,所谓我们在后面加上条件
li_list = soup.findAll('li',{'class':'rank-item'})

 

bibi_top100 = []

 

#遍历li_list
#text 显示文本内容
for i in li_list:
    # 视频标题,因为每个的标题都是li标签下的a标签里,并且class="title"
    title = i.find('a',{'class':"title"}).text
    # 视频排名
    top_num = i.find('div',{'class':"num"}).text
    # 视频得分
    rank = i.find('div',{'class':"pts"}).find('div').text
    # 播放量,
    #view_counts = i.find('div',{'class':"detail"}).find('span',{'class':'data-box'}).text
    view_counts = i.find('span',{'class':'data-box'}).text #因为span标签的 class唯一,上句可以简写
    #up主名
    #up_name = i.find('div', {'class': "detail"}).find('a').find('span',{'class':"data-box"}).text
    # up主名,上句可以这样:因为每一条li里有3a,全部找出来取第3个内容
    up_name = i.find_all('a')[2].text
    #获取upID,利用get获取url,然后解析出id,利用字符串切片
    up_id i.find_all('a')[2].get('href')[len('//space.bilibili.com/'):]
    #视频url
    url = i.find('a',{'class':"title"}).get('href')
    #每一条数据都存入进去
    bibi_tops = Bibi_top100(title=title,top_num=top_num,rank=rank,view_counts=view_counts,up_name=up_name,up_id=up_id,url=url)
    bibi_top100.append(bibi_tops)
# 文件命名
file_name =datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')

 

# 打开文件
with open('bibi视频排行榜100_%s'%file_name, 'w',encoding='utf-8',newline='') as f:
    # 实例化一个对象
    writer = csv.writer(f)
    # 写入表的标题栏
    writer.writerow(Bibi_top100.csv_title())
    # 将对应的数据一条一条循环出来 写入
    for i in bibi_top100:
        writer.writerow(i.save_data())

 运行这个文件,发现已经爬取下来。

bibi视频排行榜100_2020-02-23_15_33_48.csv

如果想改成excl,这样:

pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl
import openpyxl  #pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl
#实例化一个对象
mywb = openpyxl.Workbook()

#设置活动的表格
sheet = mywb.active

#设置这个活动表格名称
sheet.title = 'MyNewTitle'

#获取需要写入数据的表格
mysheet = mywb.get_sheet_by_name('MyNewTitle')
#写入表的头部栏
mysheet.append(Bibi_top100.csv_title())
#逐条写入数据
for i in bibi_top100:
    mysheet.append(i.save_data())

#保存到本地,excl的名字
mywb.save('NewExcelFile.xlsx')

 

参考文档:https://blog.csdn.net/weixin_38336920/article/details/82703209

点赞

2




登陆后方可评论