一、主题式网络爬虫设计方案(15分)
1.主题式网络爬虫名称
   名称:爬取跑车人气排行榜
2.主题式网络爬虫爬取的内容与数据特征分析
   内容:本次爬虫主要爬取跑车有关车型,指导价等相关信息
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
  • 实现思路:本案使用requests库爬取目标页面HTML代码,然后使用beautifulSoup库解析页面内容提取目标信息,最后利用pandas将数据存储,读取,再打印出来
技术难点:1.爬取数据提取相关信息  2.遍历过程  3.数据清洗过程  4.保存数据至excel表格 
二、主题页面的结构特征分析(15分)
1.主题页面的结构特征
    主题页面信息主要包括了各个品牌车的最新消息及测评

 

 

查找需要的数据,进行查找定位

 

 

三、网络爬虫程序设计

1.数据爬取与采集

首先爬取网页框架

import requests


def open_url(url):#获取目标页面 
#伪装用户
headers = {\'User-Agent\':\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36\'}
#获取网页 
res = requests.get(url,headers=headers)

return res#返回页面内容

def main():
url="https://top.16888.com/auto_rqjb9.html"
res = open_url(url)

with open("test.text","w",encoding="utf-8") as file:
file.write(res.text)#测试过程是否出错

if __name__ == "__main__":
main()

 

 

测试爬取内容

 

 

 

 

 

将内容进行清洗和处理

 

def qingxi(data):#专门清洗data
    n=[]
    for i in data:
        m=i.split(\'\n\')
        #删除无效数据
        m.pop(0)
        m.pop(-1)
        #整理有用的数据
        n.append(m)
        
    return n
              

 

 保存到excel文件

#保存excel文件
def to_excel(data1,data2):
    wb = openpyxl.Workbook()
    wb.guess_types = True
    ws = wb.active
    ws.append(data1)
    for each in data2:
        ws.append(each)
        
    wb.save("跑车人气排行榜.xlsx")  

 

 

    #绘制折线图
\'\'\'def line_diagram():
        x = df[\'排名\']
        y = df[\'网友口碑\']
        plt.xlabel(\'排名\')
        plt.ylabel(\'网友口碑\')
        plt.plot(x,y)
        plt.scatter(x,y)
        plt.title("排名与网友口碑折线图")
        plt.show()\'\'\'
        
   #绘制盒图
\'\'\'box_diagram():
       
       sns.boxplot(x=\'排名\',y=\'网友口碑\', data=df)
       box_diagram()\'\'\'
#绘制散点图       
\'\'\'x = df.排名
   y = df.关注度
   plt.ylabel("关注度")
   plt.scatter(x,y,color="purple",label="散点")
   plt.title("排名与关注度散点图")
   plt.legend()
   plt.show()\'\'\'
   #回归分析
\'\'\'file_path = "跑车人气排行榜.xlsx"

df = pd.read_excel(file_path)

sns.lmplot(x=\'排名\',y=\'关注度\',data=df)\'\'\'

 

 

 

 

 

 

 

 

 

 

附上完整代码

import requests 
import bs4
import openpyxl
import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams[\'font.sans-serif\']=[\'SimHei\']#用来正常显示中文
def open_url(url):
    headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
    res = requests.get(url,headers=headers)

    return res

def find_data(res):
    data= []
    soup = bs4.BeautifulSoup(res.text,"html.parser")
    #根据标签找到数据所在位置
    n = soup.find(\'div\',class_="table_show")
    tgt = n.find_all("tr")
    
    #创建两个列表存放数据
    content1=[]
    content2=[]
    #标题
    content1.append(tgt.pop(0).text)
    #数据
    for i in tgt:
        content2.append(i.text)
     
    #将两个数据存放到新的列表中
    contents=[]
    contents.append(content1)  
    contents.append(content2)
    
    #返回这个列表
    return contents

#保存excel文件
def to_excel(data1,data2):
    wb = openpyxl.Workbook()
    wb.guess_types = True
    ws = wb.active
    ws.append(data1)
    for each in data2:
        ws.append(each)
        
    wb.save("跑车人气排行榜.xlsx")    
    
 #清洗数据的东西   
def qingxi(data):#专门清洗data
    n=[]
    for i in data:
        m=i.split(\'\n\')
        #删除无效数据
        m.pop(0)
        m.pop(-1)
        #整理有用的数据
        n.append(m)
        
    return n
              
#主程序  
def main():
    url = "https://top.16888.com/auto_rqjb9.html"
    res = open_url(url)
    
    data = find_data(res)
    
    #清洗数据
    data1=qingxi(data[0])[0]
    data2=qingxi(data[1])
    
    #测试数据内容
    \'\'\'for i in data2:
        for u in range(6):
            print(\'{}:{}\'.format(data1[u],i[u]))\'\'\'
    
    #保存excel文件
    to_excel(data1,data2)

    df = pd.read_excel("跑车人气排行榜.xlsx")
    
    #绘制折线图
\'\'\'def line_diagram():
        x = df[\'排名\']
        y = df[\'网友口碑\']
        plt.xlabel(\'排名\')
        plt.ylabel(\'网友口碑\')
        plt.plot(x,y)
        plt.scatter(x,y)
        plt.title("排名与网友口碑折线图")
        plt.show()\'\'\'
        
   #绘制盒图
\'\'\'box_diagram():
       
       sns.boxplot(x=\'排名\',y=\'网友口碑\', data=df)
       box_diagram()\'\'\'
#绘制散点图       
\'\'\'x = df.排名
   y = df.关注度
   plt.ylabel("关注度")
   plt.scatter(x,y,color="purple",label="散点")
   plt.title("排名与关注度散点图")
   plt.legend()
   plt.show()\'\'\'
   #回归分析
\'\'\'file_path = "跑车人气排行榜.xlsx"

df = pd.read_excel(file_path)

sns.lmplot(x=\'排名\',y=\'关注度\',data=df)\'\'\'
if __name__ == "__main__":
    main()

四  结论

1.结论:对主题数据的分析与可视化,能够将数据变得更加直观清晰,能够更好的对数据进行信息提取。此次排名可以看出跑车的排名和关注度是成正相关的,吸引大众的不仅仅是跑车的品牌也有对跑车的综合评分。

2.任务小结:此次任务虽然说是完成了,但是还是有很多不足,在整个过程中,对知识掌握的不足导致于更多的需要在视频及朋友间寻求帮助才能够完成任务。但是在其中也是学到了很多东西,对编程这一方向有了更多兴趣。

 

 

 

版权声明:本文为zzzsy1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zzzsy1/p/12707430.html