爬取360影视排行榜-总榜(代码片段)

paristzl paristzl     2023-03-31     417

关键词:

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

1.主题式网络爬虫名称:360影视排行榜-总榜爬取
2.主题式网络爬虫爬取的内容:爬取360影视排行榜-总榜的排名、作品名称和昨日指数(前十五)
3.主题式网络爬虫设计方案概述:

先确定想要爬取的网页以及内容,用requests库访问页面用get方法获取页面资源,后登陆网页,通过网页审查元素对页面HTML进行分析,分析完成后用beautifulsoup库获取并提取所要爬的内容信息,最后保存到CSV文件中,并进行数据清洗,数据分析及可视化,绘制图表,数据拟合分析。

 

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

我们需要爬作品的内容和昨日热度指数,通过浏览页面审查元素,箭头定位查找发现

技术图片

 

作品内容的名称隐藏在<p  class_ = m-title‘>标签的中,通过查找多个作品内容发现

技术图片

 

页面的所有内容名称全部都在<p  class_ = m-title‘>标签中,向下检索发现内容的具体位置都在子标签的string属性中,可以通过beautiful soup 库实现信息提取

同理 定位多个昨日热度指数的标签位置

 技术图片技术图片

 技术图片

发现所有昨日热度指数全部都在<li,class_=‘m-item-playcount‘>的子标签<span>中可以根据这些位置开始书写代码。

 

三、网络爬虫程序设计

1.数据爬取与采集

import requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd  
from pandas import DataFrame
url = https://www.360kan.com/rank/general
# 爬虫请求头信息
headers = 
        User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50,
    
#定义函数获取并检测页面信息
def Text(url):
    try:
        respone = requests.get(url,headers=headers,timeout=30)
        respone.raise_for_status() 
        #解决中文字符编码问题
        respone.encoding = respone.apparent_encoding
        return respone.text
    except:
        return ""
html = Text(url)
#使用BeautifulSoup解析页面信息
soup = BeautifulSoup(html, "html.parser")
#开始获取作品名称信息
mingzi = soup.find_all(p,class_ = m-title)
name = []
for x in mingzi:
    name.append(x.string) #使用列表方式 添加信息
#获取作品昨日指数信息
zhi = soup.find_all("li",class_=m-item-playcount)
zhishu = []
for y in zhi:
    zhishu.append(y.span.string)
#使用中文字符的空格填充
print("		:^40".format("排名","作品名称","昨日指数",chr(12288))) 
#构建填充文件信息所需要的列表
xingxi = []
#用range函数获取前15个数据
for i in range(15):
    print("		:^40".format(i+1, name[i], zhishu[i],chr(12288)))
    xingxi.append([i+1, name[i], zhishu[i]])
#生成csv文件 
df= pd.DataFrame(xingxi,columns = [排名,作品内容,昨日指数])
df.to_csv(yingshi.csv)

输出结果截图:

技术图片

生成文件截图:

 

技术图片

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

(1)

 

#输出信息检验文件是否成功生成
df = pd.DataFrame(pd.read_csv(yingshi.csv))
print(df)

 

技术图片

(2)

# 删除无效列
df.drop(作品内容, axis = 1, inplace=True)
df.head()

 

技术图片

(3)

# 查找重复值
df.duplicated()

技术图片

(4)

# 删除重复值
df = df.drop_duplicates()
df.head()

技术图片

(5)

# 统计昨日指数和排名的空值的个数
df[昨日指数].isnull().value_counts()
df[排名].isnull().value_counts()

技术图片

(6)

#使用describe查看统计信息
df.describe()

技术图片

(7)

#数据分析
from sklearn.linear_model import LinearRegression
X = df.drop("昨日指数",axis=1)
predict_model = LinearRegression()
predict_model.fit(X,df[排名])
print("回归系数为:",predict_model.coef_)

技术图片

3、数据分析与可视化

(1)

# 绘制柱状图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif]=[SimHei] #用来正常显示中文标签
plt.bar(df.排名, df.昨日指数, color=purple,alpha=0.3)
plt.xlabel("排名")
plt.ylabel("昨日指数")
plt.title(排名与昨日指数数据柱状图)
plt.show()

技术图片

 

(2)

#绘制折线图
plt.rcParams[font.sans-serif]=[SimHei] #用来正常显示中文标签
plt.plot(df.排名, df.昨日指数, color=purple,alpha=0.3)
plt.xlabel("排名")
plt.ylabel("昨日指数")
plt.title(排名与昨日指数数据柱状图)
plt.show()

技术图片

 

(3)

#绘制散点图
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif]=[SimHei] #用于正常显示中文标签
#设置散点大小 便于数据观察
size =25
plt.scatter(df.排名,df.昨日指数,size, color="purple",alpha=0.5, marker=o)#设置透明度
plt.title("排名与昨日指数散点图")

技术图片

 

(4)

#绘制盒图
import seaborn as sns
def box():
    plt.title(昨日指数盒图)
    sns.boxplot(x=排名,y=昨日指数, data=df)
box()

技术图片

 

(5)

#绘制直方图
#设置画布大小
plt.figure(dpi=100)
zhishu = df.昨日指数
paiming = df.排名
plt.bar(zhishu,paiming,color=purple)
plt.title("昨日指数直方图")
plt.xlabel("排名")
plt.ylabel("昨日指数")
plt.show()

技术图片

 

(6)

#绘制分布图
#设置间距大小
data = a: 10, b: 15, c: 5, d: 20
names = df.昨日指数
values = df.排名
fig, axs = plt.subplots(1, 3, figsize=(9, 3), sharey=True)
axs[0].bar(names, values)
axs[1].scatter(names, values)
axs[2].plot(names, values)
fig.suptitle(Categorical Plotting)

技术图片

 

4.根据数据之间的关系,分析两个变量之间的相关系数,画出散点图,并建立变量之间的回归方程

import matplotlib.pyplot as plt
from scipy.optimize import leastsq
import numpy as np
#建立排名与昨日指数的回归方程进行回归分析
#一元一次回归散点图
X= df.排名
Y = df.昨日指数
#生成一元一次方程
def func(p,x):
    k, b = p
    return k * x + b
def error(p,x,y):
    return func(p,x)-y
#定义一个主函数 
def main():
    plt.figure(figsize=(10,6))
    p0 = [0,0]
    Para = leastsq(error,p0,args=(X,Y))
    k, b = Para[0]
    plt.scatter(X,Y,color="blue",linewidth=2)
    x=np.linspace(0,20,20)
    y=k * x + b
    plt.plot(x,y,color="blue",linewidth=2,)
    plt.title("昨日指数值分布")
    plt.grid()
    plt.show()
print(main())

 

技术图片

 

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

import requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd  

from pandas import DataFrame
url = https://www.360kan.com/rank/general
# 爬虫请求头信息
headers = 
        User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50,
    
#定义函数获取并检测页面信息
def Text(url):
    try:
        respone = requests.get(url,headers=headers,timeout=30)
        respone.raise_for_status() 
        #解决中文字符编码问题
        respone.encoding = respone.apparent_encoding
        return respone.text
    except:
        return ""
html = Text(url)
#使用BeautifulSoup解析页面信息
soup = BeautifulSoup(html, "html.parser")
#开始获取作品名称信息
mingzi = soup.find_all(p,class_ = m-title)
name = []
for x in mingzi:
    name.append(x.string) #使用列表方式 添加信息
#获取作品昨日指数信息
zhi = soup.find_all("li",class_=m-item-playcount)
zhishu = []
for y in zhi:
    zhishu.append(y.span.string)
#使用中文字符的空格填充
print("		:^40".format("排名","作品名称","昨日指数",chr(12288))) 
#构建填充文件信息所需要的列表
xingxi = []
#用range函数获取前15个数据
for i in range(15):
    print("		:^40".format(i+1, name[i], zhishu[i],chr(12288)))
    xingxi.append([i+1, name[i], zhishu[i]])
#生成csv文件 
df= pd.DataFrame(xingxi,columns = [排名,作品内容,昨日指数])
df.to_csv(yingshi.csv)


#输出信息检验文件是否成功生成
df = pd.DataFrame(pd.read_csv(yingshi.csv))
print(df)


# 删除无效列
df.drop(作品内容, axis = 1, inplace=True)
df.head()


# 查找重复值
df.duplicated()


# 删除重复值
df = df.drop_duplicates()
df.head()


# 统计昨日指数和排名的空值的个数
df[昨日指数].isnull().value_counts()
df[排名].isnull().value_counts()


#使用describe查看统计信息
df.describe()


#数据分析
from sklearn.linear_model import LinearRegression
X = df.drop("昨日指数",axis=1)
predict_model = LinearRegression()
predict_model.fit(X,df[排名])
print("回归系数为:",predict_model.coef_)


# 绘制柱状图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif]=[SimHei] #用来正常显示中文标签
plt.bar(df.排名, df.昨日指数, color=purple,alpha=0.3)
plt.xlabel("排名")
plt.ylabel("昨日指数")
plt.title(排名与昨日指数数据柱状图)
plt.show()


#绘制折线图
plt.rcParams[font.sans-serif]=[SimHei] #用来正常显示中文标签
plt.plot(df.排名, df.昨日指数, color=purple,alpha=0.3)
plt.xlabel("排名")
plt.ylabel("昨日指数")
plt.title(排名与昨日指数数据柱状图)
plt.show()


#绘制散点图
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif]=[SimHei] #用于正常显示中文标签
#设置散点大小 便于数据观察
size =25
plt.scatter(df.排名,df.昨日指数,size, color="purple",alpha=0.5, marker=o)#设置透明度
plt.title("排名与昨日指数散点图")


#绘制盒图
import seaborn as sns
def box():
    plt.title(昨日指数盒图)
    sns.boxplot(x=排名,y=昨日指数, data=df)
box()


#绘制直方图
#设置画布大小
plt.figure(dpi=100)
zhishu = df.昨日指数
paiming = df.排名
plt.bar(zhishu,paiming,color=purple)
plt.title("昨日指数直方图")
plt.xlabel("排名")
plt.ylabel("昨日指数")
plt.show()


#绘制分布图
#设置间距大小
data = a: 10, b: 15, c: 5, d: 20
names = df.昨日指数
values = df.排名
fig, axs = plt.subplots(1, 3, figsize=(9, 3), sharey=True)
axs[0].bar(names, values)
axs[1].scatter(names, values)
axs[2].plot(names, values)
fig.suptitle(Categorical Plotting)


import matplotlib.pyplot as plt
from scipy.optimize import leastsq
import numpy as np

#建立排名与昨日指数的回归方程进行回归分析
#一元一次回归散点图
X= df.排名
Y = df.昨日指数
#生成一元一次方程
def func(p,x):
    k, b = p
    return k * x + b
def error(p,x,y):
    return func(p,x)-y
#定义一个主函数 
def main():
    plt.figure(figsize=(10,6))
    p0 = [0,0]
    Para = leastsq(error,p0,args=(X,Y))
    k, b = Para[0]
    plt.scatter(X,Y,color="blue",linewidth=2)
    x=np.linspace(0,20,20)
    y=k * x + b
    plt.plot(x,y,color="blue",linewidth=2,)
    plt.title("昨日指数值分布")
    plt.grid()
    plt.show()
print(main())

 

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

经过这次对主题数据的分析与可视化,我发现对于不同类型的网站的网页分析不同,但是基本上的方法都类似。通过对数据的分析与可视化,加强对数据的掌握,对数据的处理也可以使其更加清晰,更直观的体现数据的本身。

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

小结:本次程序设计任务,对于我们是一个很好的锻炼。既是对之前课程的复习与运用,也是对我们掌握的实质的考察与补充。我也对之前的课程进行了一个复习,也找到了很多自我的短板和遗漏的知识点,也在不断的探索中学习到更多新东西,了解到其实还有很多值得我们去学习,也提高了我对Python的兴趣。

 

---爬取csdn作者排行榜(代码片段)

上篇文章介绍了requests库获取数据的基本方法,本篇文章利用自动化测试工具selenium进行数据抓取,也会对代码部分进行详细解释,以便小伙伴们能够更加理解和上手。一.selenium技术介绍Selenium是最广泛使用的开源WebUI&... 查看详情

对猫眼电影排行的爬取(代码片段)

1.目标: 对猫眼电影前100名的爬取,并将结果以文件的形式保存下来2.准备工作:requests库3.抓取分析 offset代表偏移量值,分开请求10次,就可以获取前100的电影4.抓取首页5.正则提取6.文件提取7.代码整合8.每页爬取总代码... 查看详情

使用request与正则表达式爬取bangumi动画排行榜(代码片段)

importjsonimportrequestsfromrequests.exceptionsimportRequestExceptionimportreimporttimedefget_one_page(url):try:headers=‘User-Agent‘:‘Mozilla/5.0(Macintosh;IntelMacOSX10_13_3)AppleWebKit/537.36(KHTML 查看详情

爬虫---爬取豆瓣-科幻片-排行(代码片段)

scrapy movie.py#-*-coding:utf-8-*-importscrapyimportjsonimportrefromdouban.itemsimportDoubanItemclassMovieSpider(scrapy.Spider):name=‘movie‘allowed_domains=[‘movie.douban.com‘]start_urls=[‘https: 查看详情

爬取b站热门视频排行榜(代码片段)

...络爬虫设计方案1.主题式网络爬虫名称:爬取B站热门视频排行榜2.主题式网络爬虫爬取的内容:统计所有投稿视频的数据综合得分,每日更新数据(作品,播放量,弹幕,作者)3.主题式网络爬虫设计方案概述:找到网站地址,分析... 查看详情

使用xpath爬取猫眼电影排行榜(代码片段)

最近在学习xpath,在网上找资料的时候,发现一个新手经常拿来练手的项目,爬取猫眼电影前一百名排行的信息,很多都是跟崔庆才的很雷同,基本照抄.这里就用xpath自己写了一个程序,同样也是爬取猫眼电影,获取的信息是一样的,这里... 查看详情

5行代码带你爬取“2021福布斯排行榜“,看看中国都有哪些人?(代码片段)

...8月20号,晚上坐在家里面,突然看到了2021福布斯排行榜的新闻。于是有感而发,写了这篇文章。新闻:排行榜123网富豪频道为您提供2021年福布斯富豪榜,榜单包括2021世界首富排行榜,以及全球各个国家富... 查看详情

5行代码带你爬取“2021福布斯排行榜“,看看中国都有哪些人?(代码片段)

...8月20号,晚上坐在家里面,突然看到了2021福布斯排行榜的新闻。于是有感而发,写了这篇文章。新闻:排行榜123网富豪频道为您提供2021年福布斯富豪榜,榜单包括2021世界首富排行榜,以及全球各个国家富... 查看详情

requests之豆瓣电影排行榜爬取(代码片段)

importjsonimportrequestsif__name__==‘__main__‘:url=‘https://movie.douban.com/j/chart/top_list‘param=‘type‘:‘24‘,‘interval_id‘:‘100:90‘,‘action‘:‘‘,‘start‘:‘0‘,#从库中的第几部电影中去取‘limit‘:‘20‘#一次取得个数headers=‘User-Agent‘:... 查看详情

5行代码带你爬取"2021福布斯排行榜",看看中国都有谁上榜?(代码片段)

今天晚上坐在家里面,突然看到了2021福布斯排行榜的新闻。于是有感而发,写了这篇文章。新闻:排行榜123网公布了2021年福布斯富豪榜,榜单包括2021世界首富排行榜,以及全球各个国家富豪排名。目前杰夫·... 查看详情

爬取网易云听歌排行榜歌单制作云词(代码片段)

...网页版网易云音乐,登录成功后,进入自己或好友的听歌排行榜,如图:直接使用浏览器的开发工具,刷新页面查看接口及其返回结果,找到刷新该列表的接口,如图:找到url后,再找到对应的cookie等值,复制保存。如图:至此,我... 查看详情

scrapy框架学习爬取360摄影美图(代码片段)

我们要爬取的网站为http://image.so.com/z?ch=photography,打开开发者工具,页面往下拉,观察到出现了如图所示Ajax请求,其中list就是图片的详细信息,接着观察到每个Ajax请求的sn值会递增30,当sn为30时,返回前30张图片,当sn为60时,... 查看详情

python网络爬虫课程设计(代码片段)

...式网络爬虫名称《Python爬虫对站长之家网站分类信息网站排行榜的爬取及分析》2.主题式网络爬虫爬取的内容与数据特征分析爬取内容:各类网站的网 查看详情

爬虫七夕快到了,想好和女朋友看什么片了吗?来一起用python爬取豆瓣电影分类排行榜(代码片段)

...先迫不及待地拿出我的Python。需求分析爬取豆瓣电影分类排行榜保存至本 查看详情

爬取当当网新书排行及数据分析(代码片段)

...网络爬虫设计方案1.主题式网络爬虫名称爬取当当网新书排行榜数据分析2.主题式网络爬虫爬取的内容与数据特征分析爬取新书书名和价格、折扣数据之间有线性关系,3.主题式网络爬虫设计方案概述思路:分析html页面,找到所... 查看详情

爬取斗鱼lol主播人气数据,并显示排行榜[网络爬虫][应用案例][请求头][模块](代码片段)

...块3.2re模块3.3random模块4爬取斗鱼LOL主播人气数据,并显示排行榜5文章其他地址5.1微信公众号:码农阿杰5.2CSDN博客6参考资料6.1Python3.8.2documentation1爬取斗鱼LOL主播人气数据的思路(1)分析网页结构,url调度(2)网页下载(3)数... 查看详情

python爬虫_第二课(代码片段)

...xff1a;代码:展示结果:注意点:爬取电影分类排行榜网页分析代码展示结果:前提下载并在环境中安装request 查看详情

爬取起点月票榜(代码片段)

...:1、找到一个感兴趣的网页——起点中文网的月票排行榜(https://www.qidian.com/rank/yuepiao),并尝试爬取:2、分析网页源代码,思考提取数据方法书名在h4标签,简介在p标签利用soup.find_all(name,attrs,recursive,string,**kwargs)提取书... 查看详情