Python 高级应用程序设计任务

一,主题式网络爬虫设计方案

1,主题式网络爬虫的名称

1.1豆瓣电影TOP250的爬取

2,主题式网络爬虫的内容与数据特征分析

2.1爬虫的内容

文章标题,评分,评分人数,导演,剧情类别

2.2 数据特征分析

2.2.1对剧情类型,导演做一个词云

2.2.2对评分做一个折线图

3,主题式网络爬虫设计方案概述(包括实现思路和技术难点)

3.1实现思路

   创建一个Get类,定义get_url方法用来获取所有的链接,get_alldata()解析网页,get_detail()获取具体的信息。最后实例化一个类。

 

3.2技术难点

爬取过程中并未遇到阻拦。

二,主题页面的结构特征分析

1,主题页面的特征结构

每页25项数据,共计9页,数据项225.通过F12查看源码发现所需要爬取的数据都是静态的。

2,HTML页面解析

框框中的数据都是需要爬取的字段。

Python 高级应用程序设计任务_第1张图片

 

 

3,节点(标签)查找方法与遍历发法(必要时画出节点数结构)

查找节点的方法采用beautifulsoup的find方法,先确定爬取的数据所在哪个html的节点中,找到这个节点的所有直接子节点,也就是每一个攻略项,再用for循环依次遍历,然后再具体解析遍历的每一项攻略的数据。

 

三,网络爬虫程序设计

1,爬虫程序主题要包括以下部分,要附源代码及较详解注释,并在每部分程序后面提供输出结果的截图。

 
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
import seaborn as sns
#固定url
url_title = "https://movie.douban.com/top250?start="
filter_title = "&filter="
allData = {}
#获取全部的网址信息
class Get:
    #获取所有url
    def get_url(self):
        list1 = []
        for i in range(0,226,25):#+1才能取到最后一个225
            url = url_title+str(i)+filter_title#拼接参数得到完整的url
            list1.append(url)
        return list1

    #解析出网页
    def get_alldata(self,url):
        user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
        headers = {'User-Agent': user_agent}
        data = requests.get(url,headers=headers)
        soup = BeautifulSoup(data.text,'lxml')
        return soup
    #获取title等,并存入字典
    def get_detail(self,soup):
        for i in range(0,25):
            data1 = soup.select('div[class="info"]')[i]
            movie_title =data1.find_all("span",class_="title")
            movie_p =data1.find_all("p")
            movie_comment =data1.find_all("div",class_="star")
            data = {
                    'Title':movie_title[0].get_text(),
                    'para':movie_p[0].get_text(),
                    'comment':movie_comment[0].get_text()
                   }
            allData[data["Title"]] = data
        return allData

 # ======================主流程=========================   
Movie_data = Get()
movie_url =Movie_data.get_url()
for movie_item in movie_url:
   movie_soup= Movie_data.get_alldata(movie_item)
   data = Movie_data.get_detail(movie_soup)

df = pd.DataFrame.from_dict(data)#转化成dataframe
df = df.T#转置
df.index=range(len(df))#reindex

  Python 高级应用程序设计任务_第2张图片

 

 数据清洗

#数据清洗
df['star'] = df['comment'].apply(lambda i :i.split('\n')[2])
df['comnum'] = df['comment'].apply(lambda i :i.split('\n')[4])
del df['comment']
df['Title']=df['Title'].apply(lambda i :i.split('\n')[0].strip())
df['comnum'] = df['comnum'].apply(lambda i :i.split('人')[0].strip())
df['para']=df['para'].apply(lambda x:x.strip())
df['director']=df['para'].apply(lambda x:x.split(' ')[1])
df['type']=df['para'].apply(lambda x:x.split('/')[-1])
del df['para']
#存入本地excel
writer = pd.ExcelWriter(r'C:\Users\DATACVG\Desktop\1100\douban.xlsx')
df.to_excel(r'C:\Users\DATACVG\Desktop\1100\douban.xlsx')

  Python 高级应用程序设计任务_第3张图片

 

 数据可视化

#词云
cut_text = "".join(df['type'])
wordcloud = WordCloud(
   #设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
   font_path="C:/Windows/Fonts/simfang.ttf",
   #设置了背景,宽高
   background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()    
    
cut_text = "".join(df['director'])
wordcloud = WordCloud(
   #设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
   font_path="C:/Windows/Fonts/simfang.ttf",
   #设置了背景,宽高
   background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()       

#=================================================
#数据可视化
#柱状图
s =df['star'].value_counts()
sns.barplot(x=s.index,y=s)    
#折线图
x=list(df.index)
y=list(df.comnum)
plt.figure()
plt.plot(x,y)

  Python 高级应用程序设计任务_第4张图片

 

 剧情的词云

Python 高级应用程序设计任务_第5张图片

 

 导演的词云

Python 高级应用程序设计任务_第6张图片

 

 评论数量的折线图

 

Python 高级应用程序设计任务_第7张图片

 

 评分柱状图

Python 高级应用程序设计任务_第8张图片

 

 

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

     1.1 评分为8.8,8.9分的电影较多

     1.2 人们更倾向于剧情片

     1.3 福特导演的电影有很高的票房

2.对本次程序设计任务完成的情况做一个简单的小结。

     本次作业,对爬虫和数据分析做了个整合,将所学的知识都有用上,感觉很好,期待自己的每一次进步。

你可能感兴趣的:(Python 高级应用程序设计任务)