PY爬取2020年电影票房排行

思路:用requests库获取对应页面的源码,用beautifulSoup库筛选出想要的信息,再用matplotlib库实现数据可视化。
下面直接呈现源码:

import requests
from bs4 import BeautifulSoup
from matplotlib import pyplot as plt
from matplotlib import font_manager

allUniv = []
x = []
y = []

#获取指定网址的页面源码
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""

#筛选出网页中《td》标签中的信息,并存放到列表allUniv中
def fillUnivList(soup):
    data = soup.find_all('tr')#data类型是bs4.element.ResultSet
    for tr in data:
        # print(tr)
        ltd = tr.find_all('td')#类型是bs4.element.ResultSet
        if len(ltd)==0:
            continue
        singleUniv = []
        for td in ltd:
            # print(td.string)
            singleUniv.append(td.string)
        allUniv.append(singleUniv)

#控制台打印结果
def printUnivList(num):
    print("{:<6}{:<30}{:<40}{:<8}".format("年度排名","历史排名","电影名称","上映年份"))
    for i in range(num):
        u=allUniv[i]
        print("{:<6}{:<30}{:<40}{:<8}".format(u[0],u[1],u[2],u[6]))

#将电影名称,历史排名放到x,y列表
def fix(num):
    for i in range(num):
        u = allUniv[i]
        x.append(u[2])
        y.append(u[1])

#将数据可视化
def draw():
    my_font = font_manager.FontProperties(fname="C:/WINDOWS/Fonts/MSYH.ttc")
    #设置图片大小
    plt.figure(figsize=(20, 15), dpi=80)
    #画柱状图
    plt.bar(range(len(x)),y,width=0.3)
    # plt.barh(range(len(x)), y, height=0.3)
    #设置x轴刻度和字样
    plt.xticks(range(len(x)),x,fontproperties=my_font,rotation=70)
    # 添加描述信息
    plt.xlabel("电影名称", fontproperties=my_font)
    plt.ylabel("历史排名", fontproperties=my_font)
    plt.title("2020最火的电影排行", fontproperties=my_font)
    # 绘制网格
    plt.grid(alpha=0.3)  # 里面的第一个参数设置透明度
    #展示
    plt.show()


#调用上面的所有方法,实现爬取,显示
def main():
    url = 'http://58921.com/alltime/2020'
    html = getHTMLText(url)
    soup = BeautifulSoup(html, "html.parser")
    fillUnivList(soup)
    printUnivList(20)
    fix(20)
    draw()


if __name__ == '__main__':
    main()

运行的效果如下:
PY爬取2020年电影票房排行_第1张图片

你可能感兴趣的:(python,python)