cjh159
一、主题式网络爬虫设计方案
1.主题式网络爬虫名称:
       爬取爱奇艺电影排名
2.主题式网络爬虫爬取的内容与数据特征分析:主要爬取 爱奇艺热播电影评分      
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
      实现思路为先对网页源代码分析,用BeautifulSoup对数据进行清洗,最后通过进行数据可视化。技术难点主要包括对数据的清洗以及可视化。
二、主题页面的结构特征分析
1.主题页面的结构与特征分析

 

 


2.Htmls页面解析

 

 


3.节点(标签)查找方法与遍历方法:find_all

三、网络爬虫程序设计
1.数据爬取与采集

#导入相关模块
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
def getHTMLText(url):
    try:
        #用requests抓取网页信息,请求超时时间为60秒
        r = requests.get(url,timeout=60)
        r.raise_for_status()
        #编码
        r.encoding = r.apparent_encoding
        return r.text
    except:
        #判断爬取是否出错
        return "爬取出错"

 


2.对数据进行清洗和处理

#解析电影名称
def getMovie(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #find_all
    for p in soup.find_all("p","site-piclist_info_title"):
        ulist.append(p.a.string)
    return ulist

def getPage1(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #用find_all方法获取到电影评分
    for div in soup.find_all("div","site-title_score"):
        ulist.append(div.span.strong.string)
    return ulist

def getPage2(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    u = []
    for div in soup.find_all("div","site-title_score"):
        ulist.append(list(div.span))
    return ulist

#打印信息
def printUnivList(ulist1,ulist2,ulist3,num):
    print("{:^50}".format("电影名称及评分"))
    for i in range(num):
        print("{:^45}\t\t{}{}".format(ulist1[i],ulist2[i],ulist3[i]))

# 写入excel文件
def savedata(html, filename,m,p1,p3):
    movies = []
    for i in range(len(p1)):
        try:
            score = p1[i]+p3[i]
            movies.append([getMovie(m, html)[i], score])
        except:
            ""

    pf = pd.DataFrame(movies, columns=["movie_name", "score"])
    writer = pd.ExcelWriter(filename)
    pf.to_excel(writer, sheet_name="movies")
    writer.save()

def main():
    # 保存
    filename = "电影评分.xlsx"

    # url地址
    Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html"
    #创建一个数组m用来存放爬取到的电影名称
    m = []
    p1 = []
    p2 = []
    #P3将p1和p2的数据进行合并
    p3 = []

    html = getHTMLText(Url)
    m = getMovie(m, html)
    p1 = getPage1(p1, html)
    p2 = getPage2(p2, html)
    #将p1和p2的信息合并存储到p3
    for i in range(len(p2)):
        p3.append(p2[i][1])
    #打印所有爬取到的电影信息
    printUnivList(m, p1, p3, len(m))
    savedata(html, filename,m,p1,p3)

main()

 

 



4.数据分析与可视化

import matplotlib.pyplot as plt
plt.rcParams[\'font.sans-serif\']=[\'SimHei\'] #显示中文
plt.rcParams[\'axes.unicode_minus\']=False 
Type = [\'9分以上\', \'8分~9分\', \'7分~8分\', \'6分~7分\']
Data = [1, 8, 8, 1]
plt.pie(Data ,labels=Type, autopct=\'%1.1f%%\')
plt.axis(\'equal\')
plt.title(\'各评分所占的比例\')
plt.show()
plt.bar([\'6分~7分\',\'7分~8分\',\'8分~9分\',\'9分以上\'], 
        [1, 8, 8, 1], 
        label="各评分所占比例")
plt.legend()
plt.show()

 

 

5.根据数据之间的关系,分析两个变量之间的相关系数,画出散点图,并建立变量之间的回归方程(一元或多元)

6..数据持久化

# 写入excel文件
def savedata(html, filename,m,p1,p3):
    movies = []
    for i in range(len(p1)):
        try:
            score = p1[i]+p3[i]
            movies.append([getMovie(m, html)[i], score])
        except:
            ""

    pf = pd.DataFrame(movies, columns=["movie_name", "score"])
    writer = pd.ExcelWriter(filename)
    pf.to_excel(writer, sheet_name="movies")
    writer.save()

def main():
    # 保存
    filename = "电影评分.xlsx"

    # url地址
    Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html"
    #创建一个数组m用来存放爬取到的电影名称
    m = []
    p1 = []
    p2 = []
    #P3将p1和p2的数据进行合并
    p3 = []

    html = getHTMLText(Url)
    m = getMovie(m, html)
    p1 = getPage1(p1, html)
    p2 = getPage2(p2, html)
    #将p1和p2的信息合并存储到p3
    for i in range(len(p2)):
        p3.append(p2[i][1])
    #打印所有爬取到的电影信息
    printUnivList(m, p1, p3, len(m))
    # 数据持久化
    savedata(html, filename,m,p1,p3)

main()

 

 

 

 

 7.将以上各部分的代码汇总,附上完整程序代码

#导入相关模块
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
def getHTMLText(url):
    try:
        #用requests抓取网页信息,请求超时时间为60秒
        r = requests.get(url,timeout=60)
        r.raise_for_status()
        #编码
        r.encoding = r.apparent_encoding
        return r.text
    except:
        #判断爬取是否出错
        return "爬取出错"
    
#解析电影名称
def getMovie(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #find_all
    for p in soup.find_all("p","site-piclist_info_title"):
        ulist.append(p.a.string)
    return ulist

def getPage1(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #用find_all方法获取到电影评分
    for div in soup.find_all("div","site-title_score"):
        ulist.append(div.span.strong.string)
    return ulist

def getPage2(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    u = []
    for div in soup.find_all("div","site-title_score"):
        ulist.append(list(div.span))
    return ulist

#打印信息
def printUnivList(ulist1,ulist2,ulist3,num):
    print("{:^50}".format("电影名称及评分"))
    for i in range(num):
        print("{:^45}\t\t{}{}".format(ulist1[i],ulist2[i],ulist3[i]))

# 写入excel文件
def savedata(html, filename,m,p1,p3):
    movies = []
    for i in range(len(p1)):
        try:
            score = p1[i]+p3[i]
            movies.append([getMovie(m, html)[i], score])
        except:
            ""

    pf = pd.DataFrame(movies, columns=["movie_name", "score"])
    writer = pd.ExcelWriter(filename)
    pf.to_excel(writer, sheet_name="movies")
    writer.save()

def main():
    # 保存
    filename = "电影评分.xlsx"

    # url地址
    Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html"
    #创建一个数组m用来存放爬取到的电影名称
    m = []
    p1 = []
    p2 = []
    #P3将p1和p2的数据进行合并
    p3 = []

    html = getHTMLText(Url)
    m = getMovie(m, html)
    p1 = getPage1(p1, html)
    p2 = getPage2(p2, html)
    #将p1和p2的信息合并存储到p3
    for i in range(len(p2)):
        p3.append(p2[i][1])
    #打印所有爬取到的电影信息
    printUnivList(m, p1, p3, len(m))
    # 数据持久化
    savedata(html, filename,m,p1,p3)

main()
import matplotlib.pyplot as plt
plt.rcParams[\'font.sans-serif\']=[\'SimHei\'] #显示中文
plt.rcParams[\'axes.unicode_minus\']=False 
Type = [\'9分以上\', \'8分~9分\', \'7分~8分\', \'6分~7分\']
Data = [1, 8, 8, 1]
plt.pie(Data ,labels=Type, autopct=\'%1.1f%%\')
plt.axis(\'equal\')
plt.title(\'各评分所占的比例\')
plt.show()
plt.bar([\'6分~7分\',\'7分~8分\',\'8分~9分\',\'9分以上\'], 
        [1, 8, 8, 1], 
        label="各评分所占比例")
plt.legend()
plt.show()

四、结论
1.经过对主题数据的分析与可视化,可以得到哪些结论?

可以直观的看到热播电影的评分情况
2.对本次程序设计任务完成的情况做一个简单的小结

在完成本次程序设计任务的过程中,巩固了以前学习的知识,学会了以前没有掌握的,对该课程也有了更大的兴趣。

 

分类:

技术点:

相关文章: