一,主题式网络爬虫设计方案
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页面解析
框框中的数据都是需要爬取的字段。

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

数据清洗
#数据清洗 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‘)

数据可视化
#词云
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)

剧情的词云

导演的词云

评论数量的折线图

评分柱状图

四、结论(10分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?
1.1 评分为8.8,8.9分的电影较多
1.2 人们更倾向于剧情片
1.3 福特导演的电影有很高的票房
2.对本次程序设计任务完成的情况做一个简单的小结。
本次作业,对爬虫和数据分析做了个整合,将所学的知识都有用上,感觉很好,期待自己的每一次进步。
原文:https://www.cnblogs.com/zhang-li/p/12051493.html