爬取厦门特色小吃排行榜

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

  1.     网络爬虫名称:爬取厦门特色小吃排行榜数据并分析
  2.    网络爬虫爬取的内容:爬取厦门特色小吃排行榜,阅读量/票数

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

      思路:采用网络爬虫方式进行数据分析,在分析过程中找到网页源代码进行数据分析,读取数据并保持,对数据清洗和分析,并进行数据可视化处理

      技术难点:数据太少,所掌握的知识太少,无法进行较好的处理和完善。

二、主题页面的结构特征分析
1.主题页面的结构与特征分析:

 

2.Htmls页面解析:

爬取厦门特色小吃排行榜网页为“https://www.maigoo.com/top/400023.html”

小吃名称标签在“title oneline bgcolor-q”

阅读量/票数标签在“attention color666 font16 oneline”

 

三、网络爬虫程序设计

1.数据爬取与采集

import requests

from bs4 import BeautifulSoup

import pandas as pd

from pandas import DataFrame

url="https://www.maigoo.com/top/400023.html"#爬取厦门特色小吃排行榜

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}#伪装爬虫

r=requests.get(url)#请求网站

r.encoding=r.apparent_encoding#统一编码

data=r.text

soup=BeautifulSoup(data,'html.parser')#使用“美味的汤”工具

print(soup.prettify())#显示网站结构

food=[]#建立空列表

index=[]

for i in soup.find_all(class_="title oneline bgcolor-q"):#把美食名称添加进空列表

    food.append(i.get_text().strip())

for k in soup.find_all(class_="attention color666 font16 oneline"):#把热度(阅读量/票数)添加进空列表

    index.append(k.get_text().strip())

data=[food,index]

print(data)

s=pd.DataFrame(data,index=["厦门美食小吃","阅读量/票数"])

print(s.T)#数据可视化

s.to_excel('厦门特色小吃数据.xlsx') #保存文件,数据持久化

 

2对数据进行清洗和处理(数据太少)

s=s.drop_duplicates()#重复值处理

s.head()

3.   数据分析与可视化

import matplotlib.pyplot as plt

 #显示中文

plt.rcParams['font.sans-serif']=['STSong']

#用来正常显示负号

plt.rcParams['axes.unicode_minus']=False

plt.bar(['厦门沙茶面','厦门薄饼','土笋冻','芋包','厦门面线糊','厦门馅饼'],[58,30,18,11,8,32],label="厦门小吃排行榜")

plt.title('厦门特色小吃垂直柱状图')

plt.show()

#饼图

plt.pie([58,30,18,11,8,32],labels=['厦门沙茶面','厦门薄饼','土笋冻','芋包','厦门面线糊','厦门馅饼'])

#设置显示图像为圆形

plt.axis('equal')

plt.title('厦门特色小吃饼图')

plt.show()

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

#绘制一元二次回归方程
colnames = ["排名","点评"]
df=pd.read_excel('厦门特色小吃数据.xlsx',skiprows=1,names=colnames)
X=df.排名
Y=df.点评
def func(p,x):
a,b,c=p
return a*x*x+b*x+c
def error_func(p,x,y):
return func(p,x)-y

p0=[0,0,0]
Para=leastsq(error_func,p0,args=(X,Y))
a,b,c=Para[0]
plt.figure(figsize=(10,6))
plt.scatter(X,Y,color="green",label=u"点评",linewidth=2)
x=np.linspace(0,30,20)
y=a*x*x+b*x+c
plt.plot(X,Y,color="red",label=u"拟合直线",linewidth=2)
plt.title("小吃排名和点评的一元二次回归方程关系图")
plt.legend()
plt.show()

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

import requests
from bs4 import BeautifulSoup
import pandas as pd
from pandas import DataFrame
import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
import scipy as sp

url="https://www.maigoo.com/top/400023.html"#爬取厦门特色小吃排行榜
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}#伪装爬虫
r=requests.get(url)#请求网站
r.encoding=r.apparent_encoding#统一编码
data=r.text
soup=BeautifulSoup(data,'html.parser')#使用“美味的汤”工具
print(soup.prettify())#显示网站结构
food=[]#建立空列表
index=[]
for i in soup.find_all(class_="title oneline bgcolor-q"):#把美食名称添加进空列表
food.append(i.get_text().strip())
for k in soup.find_all(class_="attention color666 font16 oneline"):#把热度添加进空列表
index.append(k.get_text().strip())
data=[food,index]
print(data)
s=pd.DataFrame(data,index=["厦门美食小吃","阅读量/票数"])
print(s.T)#数据可视化

s.to_excel('厦门热门景点数据.xlsx') #保存文件,数据持久化

#重复值处理
s=s.drop_duplicates()
s.head()


#显示中文
plt.rcParams['font.sans-serif']=['STSong']
#用来正常显示负号
plt.rcParams['axes.unicode_minus']=False
plt.bar(['厦门沙茶面','厦门薄饼','土笋冻','芋包','厦门面线糊','厦门馅饼'],[58,30,18,11,8,32],label="厦门小吃排行榜")
plt.title('厦门特色小吃垂直柱状图')
plt.show()


#饼图
plt.pie([58,30,18,11,8,32],labels=['厦门沙茶面','厦门薄饼','土笋冻','芋包','厦门面线糊','厦门馅饼'])
#设置显示图像为圆形
plt.axis('equal')
plt.title('厦门特色小吃饼图')
plt.show()

#绘制一元二次回归方程
colnames = ["排名","点评"]
df=pd.read_excel('厦门特色小吃数据.xlsx',skiprows=1,names=colnames)
X=df.排名
Y=df.点评
def func(p,x):
a,b,c=p
return a*x*x+b*x+c
def error_func(p,x,y):
return func(p,x)-y

p0=[0,0,0]
Para=leastsq(error_func,p0,args=(X,Y))
a,b,c=Para[0]
plt.figure(figsize=(10,6))
plt.scatter(X,Y,color="green",label=u"点评",linewidth=2)
x=np.linspace(0,30,20)
y=a*x*x+b*x+c
plt.plot(X,Y,color="red",label=u"拟合直线",linewidth=2)
plt.title("小吃排名和点评的一元二次回归方程关系图")
plt.legend()
plt.show()

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

答:我们可以直观的了解到厦门特色小吃的排名及人们对厦门沙茶面的喜爱远远高于其他小吃。


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

答:因为自己对python应用的掌握还不够完善,在很多地方都不懂,问了同学和百度。又因数据量太少,无法更对python课程应用的设计完善,但是可以了解到python的数据分析的有用之处,较为良好的掌握了一些,加大对python的热爱。

猜你喜欢

转载自www.cnblogs.com/w-625/p/12746364.html