excel抓取多页网页数据(原理使用python模拟访问某站排行榜页面,利用python页面)
优采云 发布时间: 2021-11-22 22:25excel抓取多页网页数据(原理使用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,用于后续数据处理或数据展示