网页数据抓取怎么写(利用Excel存储爬到的抓取豆瓣音乐Top250数据信息,还有读Excel)

优采云 发布时间: 2022-04-04 07:13

  网页数据抓取怎么写(利用Excel存储爬到的抓取豆瓣音乐Top250数据信息,还有读Excel)

  用一句话概括这篇文章:

  使用Excel存储爬取到的豆瓣音乐Top 250数据信息,并读取Excel。

  介绍:

  失踪人员正在回归,最近很迷茫,不知道是回安卓还是继续

  学Python,Android是旧情,Python是新情;Android应用层折腾

  折腾去了,无非就是:改UI、写控件、替换库、替换架构……一直想写

  自己的项目,然后各种补充优化,然后发现自己没有当年的热情,

  啊! 与Python相比,它是爬虫和批处理脚本,实用得多。

  只是Python不带路,只是自己一点点探索,走走吧!

  

  之前在写爬虫*敏*感*词*的脚本的时候,遇到了一个爬取数据如何存储的问题。

  例如,一系列图片的链接应该放在特定的文件夹中。我之前的操作是

  写入如下格式的txt文件:目录~链接

  然后读取txt文件,得到字符串,然后用split("~")分隔,

  split("~")[0] 是目录, split("~")[1] 是路径,很低。

  如果涉及到三个以上的维度,那就多拼一个吧~,在上一节中抓到

  在做半次元coser的时候,遇到了一个很恶心的问题。符号都被使用了。

  难分离,特殊字符一一尝试,然后就只能测试Θ..

  迫切需要一些东西来存储我们捕获的数据,当然还有最好的用途:数据库

  但是考虑到学习成本(主要是我对它不熟悉!),先通过一个简单的东西来保存。

  

  最简单的方法肯定是用Excel表格,最直观,非程序员也能看懂!

  话不多说,开始本节吧~本节抓个例子:豆瓣音乐Top 250

  1.编写数据捕获脚本

  按顺序检查:

  1.可以在Network选项卡中找到数据,非JS动态加载,直接处理结果即可

  2.点击第二页,选择XHR,没啥东西,不是Ajax动态加载

  链接规则:

  链接规则很明显,每 25 个页面,0,25,50,75...225

  请求头:

  只有一个: 主持人:

  模拟请求的套路已经想通了,接下来就是对网页进行处理,得到想要的数据:

  看Element不难发现,数据是放在单独的表中的:

  

  单击以下之一:

  

  首先,我们来看看我们要采集的数据:

  图片链接、歌名、艺人、发行时间、分类、评分、评分数、歌曲详情页

  那我就慢慢挖数据,我私下挖,就不找之前的文章看了,

  下面是直接代码:

  

  查看控制台打印的信息:

  

  好的,没问题,我们来看看如何将数据写入到excel表格中~

  2.如何将数据写入Excel

  第一步:安装库操作Excel,需要两个库:xlwt(写Excel)和xlrd(读Excel)

  一波命令行 pip 安装。

  须藤 pip3 安装 xlwt

  须藤 pip3 安装 xlrd

  第 2 步:熟悉几个基本功能

  写入 Excel:

  xlwt.Workbook():创建工作簿

  Workbook object.add_sheet(cell_overwrite_ok=True):添加工作表,括号内可选

  确认是否可以重置同一个cell单元的参数

  Worksheet object.write(行号、列号、插入数据、样式),第四个参数可选

  举个简单的例子:像这样插入数据:

  sheet.write(0,0,"名称")

  sheet.write(0,1,"学号")

  sheet.write(1,0,"小猪")

  sheet.write(1,1,"No1")

  结果形式:

  

  Workbook object.save(Excel 文件名):保存到 Excel 文件

  阅读 Excel:

  xlrd.open_workbook():读取 Excel 文件以获取工作簿对象

  Workbook object.sheets()[0]:根据索引获取工作簿中的一个工作表

  worksheet object.nrows:获取行数

  工作表 object.ncols:获取列数

  Worksheet object.row_values(pos):读取一行的数据,返回结果为列表类型

  3.编写一个 Excel 助手类

  基本语法就差不多明白了,接下来我们写一个工具类来爬取我们的爬虫

  将爬取的数据写入Excel表格,四种方法:

  style:根据传入的字体名称、高度、粗体与否返回 Style 样式

  __init__:完成Excel表格的一些初始化操作,初始化表头

  insert_data:将爬取的数据插入Excel的方法

  read_data:Excel中读取数据的方法

  然后一步一步,先style方法:

  

  接下来是__init__方法,判断Excel文件是否存在。如果它不存在,则创建一个新的并初始化它。

  

  然后是insert_data:

  

  最后是 read_data:

  

  代码不复杂,那就把调用代码写下来试试:

  

  添加一个打印 data_group 的方法,查看捕获的数据,然后运行:

  

  没问题,圈出[[,这里我要表达的是结果是一个大列表嵌套了多个列表!

  然后添加以下代码:

  

  执行后可以看到生成了一个dbyy.xlsx文件,打开就可以看到:

  

  啧啧,写的很成功,太美了!

  然后注释掉不相关的代码,调用读取Excel的方法:

  

  读写都没有问题,

  

  4.总结

  本节讲解如何将爬取的数据存储在 Excel 表中,并读取 Excel 表中的数据,

  虽然没有高端数据库,但是相比之前使用分隔符来分隔多种类型的数据,使用的时候

  split() 好很多,非开发者可以直接理解。另外,也许有一天你可以得到它

  一些文员(写批量处理Excel表格的脚本),除了做一些词频统计

  让我们玩一下剧本,最后以一张哲学启蒙老师的照片结束本节。愿天堂没有摔跤:

  

  重新*敏*感*词*

  导入请求

  导入 xlwt

  导入 xlrd

  将工具导入为 t

  rate_count_pattern = pile("(\d*person evaluation)", re.S) # 获取评分数的规律性

  base_url = ''

  save_file = 'dbyy.xlsx'

  # 如何解析网页获取数据

  def parse_url(偏移量):

  resp = requests.get(base_url, params={'page': offset})

  print("解析:" + resp.url)

  结果 = []

  如果 resp.status_code == 200:

  汤 = t.get_bs(resp.content)

  表 = 汤.select('table[width="100%%"]')

  对于表格中的表格:

  a = table.find('a')

  detail_url = a['href'] # 歌曲详情页

  img_url = a.img['src'] # 图片地址

  music_name = a.img['alt'] # 歌曲名称

  p = table.find('p')

  data_split = p.get_text().split("/")

  歌手 = data_split[0].strip() # 歌手

  public_date = data_split[1].strip()

  类别 = "" # 类别

  对于 data_split[2:] 中的数据:

  类别 += data.strip() + "/"

  div = table.find('div', class_="star clearfix")

  score = div.select('span.rating_nums')[0].text # 分数

  rate_count = rate_count_pattern.search(div.select('span.pl')[0].get_text()).group(0) # 评分数

  result.append([img_url, music_name, 歌手, public_date, category, score, rate_count, detail_url])

  返回结果

  ExcelHelper 类:

  def __init__(self):

  如果不是 t.is_dir_existed(save_file, mkdir=False):

  # 1.创建工作簿

  self.workbook = xlwt.Workbook()

  # 2.创建工作表,第二个参数用于确认是否可以重置同一个单元格单元

  self.sheet = self.workbook.add_sheet(u"豆瓣音乐Top 250", cell_overwrite_ok=True)

  # 3.初始化头部

  self.headTitles = [u'图片链接', u'歌曲名', u'歌手', u'发行时间', u'类别', u'评分', u'收视数', u'歌曲详情页' ]

  对于我,枚举中的项目(self.headTitles):

  self.sheet.write(0, i, item, self.style('Monaco', 220, bold=True))

  self.workbook.save(保存文件)

  # 参数为:字体名称、字体高度、粗体与否

  def 风格(自我,姓名,身高,粗体=假):

  style = xlwt.XFStyle() # 将样式赋值给XFStyle(),初始化样式

  font = xlwt.Font() # 为样式创建字体样式

  font.name = 名称

  字体高度 = 高度

  font.bold = 粗体

  回归风格

  # 向单元格中插入数据

  def 插入数据(自我,数据组):

  尝试:

  xlsx = xlrd.open_workbook(save_file) # 读取 Excel 文件

  table = xlsx.sheets()[0] # 按索引获取表格

  row_count = table.nrows #获取当前行数,新插入的数据从这里开始

  计数 = 0

  对于 data_group 中的数据:

  对于我在范围内(len(数据)):

  self.sheet.write(row_count + count, i, data[i])

  计数 += 1

  例外为 e:

  打印(e)

  最后:

  self.workbook.save(保存文件)

  # 在 Excel 中读取数据

  def read_data(self):

  xlsx = xlrd.open_workbook(save_file)

  表 = xlsx.sheets()[0]

  nrows = table.nrows # 行数

  ncols = table.ncols # 列数

  # 从第一行开始,0为表头

  对于范围内的 i(1,nrows):

  # 读取一行数据

  row_value = table.row_values(i)

  打印(行值)

  如果 __name__ == '__main__':

  offsets = [x for x in range(0, 250, 25)]

  数据组 = []

  对于偏移量中的偏移量:

  data_group += parse_url(偏移量)

  打印(数据组)

  excel = ExcelHelper()

  excel.insert_data(data_group)

  excel.read_data()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线