excel抓取多页网页数据(原理使用python模拟访问某站排行榜页面,利用python页面)

优采云 发布时间: 2021-11-22 22:25

  excel抓取多页网页数据(原理使用python模拟访问某站排行榜页面,利用python页面)

  使用python爬取的原理,简单的将某站排行榜的视频信息处理保存到本地excel

  使用python模拟访问某站的排名页面,使用美汤解析页面数据,整理、归类、调整数据,并保存到本地

  需要使用库

  import requests

from bs4 import BeautifulSoup

import pandas as pd

import datetime

import matplotlib.pyplot as plt

  主要功能获取网页内容

  def GetWeb(url=None, headers=None):

'''

此函数用于获取网页内容

input

url:网页的url

headers:网页请求头

retrun

soup:经过Beautiful Soup解析后的数据

'''

data = []

response = requests.get(url, headers=headers)

if response.status_code == 200:

data = response.content.decode('utf-8')

soup = BeautifulSoup(data, 'lxml')

return soup

else:

print('网页解析失败')

return None

  提取所需数据

  def GetMess(soup):

'''

此函数用来从网页中提取需要的数据

input

soup:Beautiful Soup解析的数据

return

videodata:字典形式的数据,里面包含:视频标题、视频综合得分、

视频播放量、视频评论数、up主名字、视频BV等数据

'''

video_names = [] # 视频标题

video_scores = [] # 视频综合得分

video_play = [] # 视频播放量

video_comment = [] # 视频评论数

up_name = [] # up主名字

mess = [] # 视频地址

video_id = [] # 视频BV

# 对视频标题的处理

namelist = soup.find_all('a', class_='title')

for name in namelist:

video_names.append(name.get_text('title'))

# 对视频综合得分数据的处理

scorelist = soup.find_all(class_='pts')

for score in scorelist:

video_scores.append(score.get_text().replace('综合得分\n', '').strip())

# 对视频播放量、评论数、up主名字的处理

messages = soup.find_all(class_='data-box')

for i in range(0, len(messages), 3):

play = messages[i].get_text().strip()

if messages[i].get_text().strip().find("万"):

play = float(messages[i].get_text().strip().replace("万", ""))*10000

video_play.append(play)

comment = messages[i + 1].get_text().strip()

# 处理数据中的“万”字

if messages[i + 1].get_text().strip().find("万") > 0:

comment = float(messages[i + 1].get_text().strip().replace("万", "")) * 10000

video_comment.append(comment)

# video_play.append(messages[i].get_text().strip())

# video_comment.append(messages[i + 1].get_text().strip())

up_name.append(messages[i + 2].get_text().strip())

# 对视频id的处理

for value in soup.find_all('a', class_='title'):

mess.append(value.get('href'))

# x = 0

for i in range(len(mess)):

if type(mess[i]) != str:

pass

elif mess[i].startswith('//www.bilibili.com/video/'):

# print(x,":",mess[i],",处理后:",mess[i].lstrip('//www.bilibili.com/video/)'))

video_id.append(mess[i].lstrip('//www.bilibili.com/video/)'))

# x = x + 1

else:

pass

video_ids = []

for i in video_id:

if not i in video_ids:

video_ids.append(i)

# 视频排名

rank = [i for i in range(1, 101, 1)]

# 打包整理成一个字典

videodata = {'视频名字': video_names,

'播放量': video_play,

'评论数': video_comment,

'综合得分': video_scores,

'up主名字': up_name,

'视频BV': video_ids,

'排名': rank

}

return videodata

  以指定格式另存为excel,用于后续数据处理或数据展示

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线