原标题:Python爬虫以及数据可视化分析!
简单几步,通过Python对B站番剧排行数据进行爬取,并进行可视化分析
源码文件可以参考Github上传的项目:/Lemon-Sheep/Py/tree/master
下面,我们开始吧!
PS: 作为Python爬虫初学者,如有不正确的地方,望各路大神不吝赐教[抱拳]
本项目将会对B站番剧排行的数据进行网页信息爬取以及数据可视化分析
首先,准备好相关库
requests、pandas、BeautifulSoup、matplotlib等
因为这是第三方库,所以我们需要额外下载 下载有两种方法(以requests为例,其余库的安装方法类似):
(一)在命令行输入
前提:装了pip( Python 包管理工具,提供了对Python 包的查找、下载、安装、卸载的功能。 )
pip install requests
(二)通过PyCharm下载
第一步:编译器左上角File–>Settings…
第二步:找到Project Interpreter 点击右上角加号按钮,弹出界面上方搜索库名:requests,点击左下角Install ,当提示successfully时,即安装完成。
准备工作做好后,开始项目的实行
一、获取网页内容
def get_html(url):
try:
r = requests.get(url) # 使用get来获取网页数据
r.raise_for_status() # 如果返回参数不为200,抛出异常
r.encoding = r.apparent_encoding # 获取网页编码方式
return r.text # 返回获取的内容
except:
return 错误
我们来看爬取情况,是否有我们想要的内容:
def main():
url = /v/popular/rank/bangumi # 网址
html = get_html(url) # 获取返回值
print(html) # 打印if __name__ == \__main__: #入口
main()
爬取结果如下图所示:
成功!
二、信息解析阶段:
第一步,先构建BeautifulSoup实例
soup = BeautifulSoup(html, html.parser) # 指定BeautifulSoup的解析器
第二步,初始化要存入信息的容器
# 定义好相关列表准备存储相关信息
TScore = [] # 综合评分
name = [] # 动漫名字
play= [] # 播放量
review = [] # 评论数
favorite= [] # 收藏数
第三步,开始信息整理 我们先获取番剧的名字,并将它们先存进列表中
# ******************************************** 动漫名字存储
for tag in soup.find_all(div, class_=info):
# print(tag)
bf = tag.a.string
name.append(str(bf))
print(name)
此处我们用到了beautifulsoup的find_all()来进行解析。在这里,find_all()的第一个参数是标签名,第二个是标签中的class值(注意下划线哦(class_=‘info’))。
我们在网页界面按下F12,就能看到网页代码,找到相应位置,就能清晰地看见相关信息:
接着,我们用几乎相同的方法来对综合评分、播放量,评论数和收藏数来进行提取
# ******************************************** 播放量存储
for tag in soup.find_all(div, class_=detail):
# print(tag)
bf = tag.find(span, class_=data-box).get_text()
# 统一单位为‘万’
if 亿 in bf:
num = float(re.search(r\d(.\d)?, bf).group()) * 10000
# print(num)
bf = num
else:
bf = re.search(r\d*(\.)?\d, bf).group()
play.append(float(bf))
print(play)
# ******************************************** 评论数存储
for tag in soup.find_all(div, class_=detail):
# pl = tag.span.next_sibling.next_sibling
pl = tag.find(span, class_=data-box).next_sibling.next_sibling.get_text()
# *********统一单位
if 万 not in pl:
pl = \%.1f