爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据

经过了前面的努力,我们成功获取到了数据,并且学会了保存,但是只是用网页展示出来,是不是有一些不够美观呢?

所以本节的内容是:数据的可视化。拿到了数据却不能使其简单易懂并且足够突出,那就是不是好的数据工程师。

效果图:


部分效果图
  • 本节需要做的准备

安装pyecharts这个Python的图表库:在之前我们安装了requests、lxml、bs4。所以只需要再在cmd里面 pip3 install pyecharts==0.5.6 就OK啦,如果失败,请仔细阅读教程:爬虫入门教程⑥—安装爬虫常用工具包.

  ps:由于pyecharts升级到1.x版本,发生了较大的变化,所以本教程安装时候指定了版本为0.5.6,否则代码会报错。
如果报错ImportError: cannot import name 'Page' from 'pyecharts'那就是没有加版本限制导致安装了最新版的pyecharts,需要先执行pip3 uninstall pyecharts,按y确认之后,再次执行 pip3 install pyecharts==0.5.6
后续会继续更新教程的。

 

  • pyecharts简介

这是百度echarts图表库,使用Python接口进行生成图表的一个库,非常炫酷。在之前绘图基本上是用的【Matplotlib】这个库,这个库功能非常强大,但是缺点也比较明显,api调用比较复杂,新手上手很慢也很难。于是在去年,陈键冬大佬推出了一个简单易用的绘图库 pyecharts

我当时怀着试一试的心情使用了一下,哇,超好用的,对新手超友好的,代码和图都写出来了,非常详细,同时配置项也非常清晰。一口气画5个图都超快超简单的~!

  • 确定可视化的目标

这是很重要的一步,先确认哪些数据值得拿来可视化,然后再去编写代码。一部电影的信息有:名字、上映日期、地区、类型、关注者数量。最明显的当然是关注者数量排行榜(柱状图),除此之外我还想了几个:
上映电影类型占比(饼图)
上映地区占比(饼图)
上映日期柱状图

  • 采集所有电影信息

先上之前的代码:

import requests
from bs4 import BeautifulSoup  # 从bs4引入BeautifulSoup

#请求网页
# 旧版教程
# url = "https://movie.douban.com/cinema/later/chengdu/"
# response = requests.get(url)

# 2019-12-23更新,解决不能获取到响应的问题
url = "https://movie.douban.com/cinema/later/chengdu/"  # URL不变
# 新增伪装成Chrome浏览器的header
fake_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
}
response = requests.get(url, headers=fake_headers)  # 请求参数里面把假的请求header加上

soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')

all_movies = soup.find('div', id="showing-soon")  # 先找到最大的div

for each_movie in all_movies.find_all('div', class_="item"):  # 从最大的div里面找到影片的div
    # print(each_movie)  # 输出每个影片div的内容
    all_a_tag = each_movie.find_all('a')
    all_li_tag = each_movie.find_all('li')
    movie_name = all_a_tag[1].text
    moive_href = all_a_tag[1]['href']
    movie_date = all_li_tag[0].text
    movie_type = all_li_tag[1].text
    movie_area = all_li_tag[2].text
    movie_lovers = all_li_tag[3].text
    print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
        movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))

这是数据的基础信息,我们先全部拿到,然后放进一个list,方便后续的比较分析处理。同时我们在代码顶部,从pyecharts引入Page(在一张图显示多个图表)、Pie(饼图)、Bar(柱状图)。

# 可视化爬取结果
import requests
from bs4 import BeautifulSoup  # 从bs4引入BeautifulSoup
from pyecharts import Page, Pie, Bar  # 引入绘图需要的模块

#请求网页
# 旧版教程
# url = "https://movie.douban.com/cinema/later/chengdu/"
# response = requests.get(url)

# 2019-12-23更新,解决不能获取到响应的问题
url = "https://movie.douban.com/cinema/later/chengdu/"  # URL不变
# 新增伪装成Chrome浏览器的header
fake_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
}
response = requests.get(url, headers=fake_headers)  # 请求参数里面把假的请求header加上

soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')

all_movies = soup.find('div', id="showing-soon")  # 先找到最大的div

# 先把所有的数据存到这个list里面
all_movies_info = []
for each_movie in all_movies.find_all('div', class_="item"):  # 从最大的div里面找到影片的div
    # print(each_movie)  # 输出每个影片div的内容
    all_a_tag = each_movie.find_all('a')
    all_li_tag = each_movie.find_all('li')
    movie_name = all_a_tag[1].text
    moive_href = all_a_tag[1]['href']
    movie_date = all_li_tag[0].text
    movie_type = all_li_tag[1].text
    movie_area = all_li_tag[2].text
    movie_lovers = all_li_tag[3].text.replace('人想看', '') #  去掉除了数字之外的字
    # 把电影数据添加到list
    all_movies_info.append({'name': movie_name, 'date': movie_date, 'type': movie_type, 
                            'area': movie_area, 'lovers': movie_lovers})
    # print('名字:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
        # movie_name, movie_date, movie_type, movie_area, movie_lovers))
print(all_movies_info)  # 输出一下检查数据是否传递成功

 

  • 绘制关注者排行榜

处理逻辑:首先把所有的电影以关注者数量排个序,然后从所有电影里面以获取到电影的名字和电影的关注者数量,最后添加到柱状图里。
sorted函数,第一个参数接受一个可以遍历的对象,key参数接受一个匿名函数,用以指定以遍历对象内的哪个元素作为排序的依据
以下代码添加到上一个示例代码后面即可。

# 绘制关注者排行榜图

# i['name'] for i in all_movies_info 这个是Python的快捷方式,
# 这一句的作用是从all_movies_info这个list里面依次取出每个元素,
# 并且取出这个元素的 name 属性
sort_by_lovers = sorted(all_movies_info, key=lambda x: int(x['lovers']))
all_names = [i['name'] for i in sort_by_lovers]
all_lovers = [i['lovers'] for i in sort_by_lovers]

lovers_rank_bar = Bar('电影关注者排行榜')  # 初始化图表,给个名字
# all_names是所有电影名,作为X轴, all_lovers是关注者的数量,作为Y轴。二者数据一一对应。
# is_convert=True设置x、y轴对调,。is_label_show=True 显示y轴值。 label_pos='right' Y轴值显示在右边
lovers_rank_bar.add('', all_names, all_lovers, is_convert=True, is_label_show=True, label_pos='right')
lovers_rank_bar  # jupyter下直接显示图表在输出框内
还有 61% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容