Python爬虫教程篇+图形化整理数据(数学建模可用)

news2024/11/17 15:49:54

一、首先我们先看要求

1.写一个爬虫程序

2、爬取目标网站数据,关键项不能少于5项。

3、存储数据到数据库,可以进行增删改查操作。

4、扩展:将库中数据进行可视化展示。

二、操作步骤:

首先我们根据要求找到一个适合自己的网站,我找的网站如下所示:

电影 / 精品电影_电影天堂-迅雷电影下载 (dygod.net)


1、根据要求我们导入爬取网页所需要的板块:

import requests   #扒取页面
import re         #正则
import xlwt       #Excel库用于读取和写入
from bs4 import BeautifulSoup    #从网页提取信息

2、设置url为我们所需要爬的网站,并为其增加ua报头

url = "https://www.dygod.net/html/gndy/dyzz/"
# url1 = "https://movie.douban.com/top250?start=0&filter="

hd = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188'
}

3.我们记录爬取的电影,以及创建自己的工作表

count = 0 #记录爬取的电影数量
total = []
workbook = xlwt.Workbook(encoding="utf-8")  #创建workbook对象
worksheet = workbook.add_sheet('sheet1')    #创建工作表

4.我们基于网站上的数据通过F12进入调试模式,找寻自己需要爬取的数据,进行封装和继承,最终保存在movie.xls表格中导进去

def saveExcel(worksheet, count, lst):
    for i, value in enumerate(lst):
        worksheet.write(count, i, value)



for i in range(2, 10):  # 爬取电影的页面数量,范围从第2页到第10页(包含第10页)
    url = "https://www.dygod.net/html/gndy/dyzz/index_"+str(i)+".html"
    # print(url)
    res = requests.get(url,headers=hd)
    res.encoding = res.apparent_encoding
    # print(res.text)

    soup = BeautifulSoup(res.text,"html.parser")
    # print(soup.title,type(soup.title))

    ret = soup.find_all(class_="tbspan",style="margin-top:6px")    #找到所有电影的表格

    for x in ret:     #遍历每一个电影表格
        info = []
        print(x.find("a").string)  #电影名称
        info.append(x.find("a").string)

        pat = re.compile(r"◎译  名(.*)\n")
        ret_translated_name = re.findall(pat, str(x))
        for n in ret_translated_name:
            n = n.replace(u'/u3000', u'')
            print("◎译  名:", n)
            info.append(str(n).split("/")[0])

        pat = re.compile(r"◎年  代(.*)\n")
        ret_year = re.findall(pat, str(x))
        for n in ret_year:
            n = n.replace(u'/u3000', u'')
            print("◎年  代:", n)
            info.append(str(n))

        pat = re.compile(r"◎产  地(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎产  地:", n)
            info.append(str(n))
        pat = re.compile(r"◎类  别(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎类  别:", n)
            info.append(str(n))
        pat = re.compile(r"◎语  言(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎语  言:", n)
            info.append(str(n))
        pat = re.compile(r"◎字  幕(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎字  幕:", n)
            info.append(str(n))
        #print(count,info)
        saveExcel(worksheet,count,info)
        count += 1
        print("="*100)
workbook.save("movie.xls")
print(count)

5.如此就做到了爬取我们所需要的数据是不是很简单,最后的汇总源码如下:

# -*- coding:utf-8 -*-
'''
@Author: lingchenwudiandexing
@contact: 3131579667@qq.com
@Time: 2023/8/2 10:24
@version: 1.0
'''
from urllib import response

import requests   #扒取页面
import re         #正则
import xlwt       #Excel库用于读取和写入
from bs4 import BeautifulSoup    #从网页提取信息

url = "https://www.dygod.net/html/gndy/dyzz/"
# url1 = "https://movie.douban.com/top250?start=0&filter="

hd = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188'
}







#正式代码开始
count = 0 #记录爬取的电影数量
total = []
workbook = xlwt.Workbook(encoding="utf-8")  #创建workbook对象
worksheet = workbook.add_sheet('sheet1')    #创建工作表


def saveExcel(worksheet, count, lst):
    for i, value in enumerate(lst):
        worksheet.write(count, i, value)



for i in range(2, 10):  # 爬取电影的页面数量,范围从第2页到第10页(包含第10页)
    url = "https://www.dygod.net/html/gndy/dyzz/index_"+str(i)+".html"
    # print(url)
    res = requests.get(url,headers=hd)
    res.encoding = res.apparent_encoding
    # print(res.text)

    soup = BeautifulSoup(res.text,"html.parser")
    # print(soup.title,type(soup.title))

    ret = soup.find_all(class_="tbspan",style="margin-top:6px")    #找到所有电影的表格

    for x in ret:     #遍历每一个电影表格
        info = []
        print(x.find("a").string)  #电影名称
        info.append(x.find("a").string)

        pat = re.compile(r"◎译  名(.*)\n")
        ret_translated_name = re.findall(pat, str(x))
        for n in ret_translated_name:
            n = n.replace(u'/u3000', u'')
            print("◎译  名:", n)
            info.append(str(n).split("/")[0])

        pat = re.compile(r"◎年  代(.*)\n")
        ret_year = re.findall(pat, str(x))
        for n in ret_year:
            n = n.replace(u'/u3000', u'')
            print("◎年  代:", n)
            info.append(str(n))

        pat = re.compile(r"◎产  地(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎产  地:", n)
            info.append(str(n))
        pat = re.compile(r"◎类  别(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎类  别:", n)
            info.append(str(n))
        pat = re.compile(r"◎语  言(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎语  言:", n)
            info.append(str(n))
        pat = re.compile(r"◎字  幕(.*)\n")
        ret_production_country = re.findall(pat, str(x))
        for n in ret_production_country:
            n = n.replace(u'/u3000', u'')
            print("◎字  幕:", n)
            info.append(str(n))
        #print(count,info)
        saveExcel(worksheet,count,info)
        count += 1
        print("="*100)
workbook.save("movie.xls")
print(count)

三、基础部分实现结果截屏

 

四、实验Plus升级版,增加数据汇总为图形化界面,面向对象

 1.导入图像化界面的板块

import matplotlib.pyplot as plt
import numpy as np
from bs4 import BeautifulSoup

2.实现自己想要实现的图形:(其中几行几列标注清楚)

①:初步:创建自己的画布,以及想要实现展现的语言

# 将数据保存到Pandas DataFrame对象中
columns = ["电影名称", "译名", "年代", "产地", "类别", "语言","字幕"]
df = pd.DataFrame(data, columns=columns)

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 创建一个包含4个子图的画布
figure = plt.figure(figsize=(12, 8))

②:创建线形图:

# 创建线性图
subplot_line = figure.add_subplot(2, 2, 1)
x_data = np.arange(0, 100)
y_data = np.arange(1, 101)
subplot_line.plot(x_data, y_data)
subplot_line.set_title('线性图')

③:创建饼状图:

subplot_pie = figure.add_subplot(2, 2, 3)
subplot_pie.pie(genre_counts.values, labels=genre_counts.index, autopct='%1.1f%%')
subplot_pie.set_title('饼状图')

④:创建散点图:(设置好断点,不然会出现字符重叠的情况)

# 创建散点图
subplot_scatter = figure.add_subplot(2, 2, 4)
x_scatter = np.random.rand(50)
y_scatter = np.random.rand(50)
subplot_scatter.scatter(x_scatter, y_scatter)
subplot_scatter.set_title('散点图')
import warnings
warnings.filterwarnings("ignore")
plt.tight_layout()
plt.show()

⑤:到此我们整个爬虫以及数据记录便结束了,附上Plus实现截图:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/827026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gitlab CI/CD 安装 gitlab runner

一、为什么需要安装gitlab runner ? 极狐GitLab Runner 极狐GitLab Runner 是在流水线中运行作业的应用,与极狐GitLab CI/CD 配合运作。 说白了就是你部署的一个agent。 二、如何安装? 1.介绍通过helm部署github runner 2.helm添加仓库 h…

k8s kubeedge安装metrics-server监控节点cpu内存使用情况

k8s kubeedge安装metrics-server监控节点cpu内存使用情况 官方安装地址: https://kubeedge.io/en/docs/advanced/metrics/ k8s的master节点上安装metrics-server #在k8s的master节点上执行#创建目录 mkdir metrics-server #下载deploy文件 wget https://github.com/kubernet…

ansible安装及rhel8仓库配置

目录 一、本地仓库 问题: 解决: 1.创建一个仓库: 内容: 2.挂载: 挂载: 测试: 3.或者直接使用阿里云的源 二.配置ansible仓库 1.下载: 2.检查 一、本地仓库 问题: 当…

史上最细,接口自动化测试框架-Pytest+Allure+Excel整理(代码)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Allure框架 Allu…

第一百二十天学习记录::计算机硬件技术基础:存储器及存储管理

分级存储器系统 存储器从内到外分为四级:内部寄存器、高速缓冲存储器、内存储器和外存储器。它们在存取速度上逐级递减,在存储容量上逐级递增。 内部寄存器 内部寄存器是计算机处理器内部的一种高速缓存,是用来存储临时数据和指令等信息的…

python与深度学习(十四):CNN和IKUN模型二

目录 1. 说明2. IKUN模型的CNN模型测试2.1 导入相关库2.2 加载模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章猫狗大战训练的模型进行测试。…

opencv 31-图像平滑处理-方框滤波cv2.boxFilter()

方框滤波(Box Filtering)是一种简单的图像平滑处理方法,它主要用于去除图像中的噪声和减少细节,同时保持图像的整体亮度分布。 方框滤波的原理很简单:对于图像中的每个像素,将其周围的一个固定大小的邻域内…

DP-GAN剩余代码

在前面计算完损失后,该进行更新: 1:netEMA是模型的生成器: 遍历生成器的state_dict,将每一个键对应的值乘以EMA_decay。 接着根据当前迭代步数计算num_upd,每1000,2500,10000代倍数就执行一次。 当num…

MyBatis查询数据库1(概念+创建项目+基础交互)

目录 1.MyBatis是什么? 2.为什么学习MyBatis? 3. 怎么学 MyBatis 4.第⼀个MyBatis查询 4.1 添加MyBatis框架支持 4.1.1老项目添加MyBatis 4.1.2 新项目添加MyBatis 4.2 配置连接字符串和MyBatis 4.2.1 配置连接字符串 4.2.2 配置 MyBatis 中的…

PHM的设备故障模型如何构建?

预测性维护与健康管理(Prognostics Health Management,PHM)是现代工业中的一个关键概念,它旨在通过使用数据和先进的分析技术,实现设备故障的早期预测和预防,从而最大限度地提高设备的可用性和可靠性。而在…

DAY1,C高级(命令,Linux的文件系统,软、硬链接文件)

1.今日思维导图; 2.创建链接文件; 文件系统中的每个文件都与唯一的 inode 相关联,inode 存储了文件的元数据和数据块的地址,文件名与 inode 之间的链接关系称为硬链接或软链接。 硬链接文件的创建: ln 被链接文件的…

14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo

Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类,如用于 TCP 通信的QTcpSocket 和 QTcpServer,用于 UDP 通信的 QUdpSocket,还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest,QNetworkReply 和Q…

【英杰送书-第六期】spring—加载监听器

前几天的时候,项目里有一个需求,需要一个开关控制代码中是否执行一段逻辑,于是理所当然的在yml文件中配置了一个属性作为开关,再配合nacos就可以随时改变这个值达到我们的目的,yml文件中是这样写的: switc…

SpringMVC学习记录

SpringMVC技术与servlet技术功能等同,均属于web层开发技术 SpringMVC简介 SpringMVC概述 SpringMVC是一种基于Java实现MIVC模型的轻量级web框架 优点 使用简单,开发便捷(相比于servlet)灵活性强 SpringMVC是一种表现层框架技术 Spring…

万字长文解析深度学习中的术语

引言 新手在学习深度学习或者在看深度学习论文的过程中,有不少专业词汇,软件翻译不出来,就算是翻译出来也看不懂,因为不少术语是借用其他学科的概念,这里整理了一些在深度学习中常见的术语,并对一些概念进…

一文读懂Etcd及其原理和应用场景

文章目录 0. 前言1. ETCD的概念和设计2.ETCD的命令示例查看ETCD的版本信息列出ETCD集群中的成员检查ETCD集群的健康状态获取指定key的值设置指定key的值删除指定key及其对应的值监控指定key的变化将ETCD的数据备份到指定文件中 3. ETCD的使用场景4. ETCD的优缺点5. 配置文件示例…

Spring boot 集成 Skywalking 配置 || Skywalking 打不开【已解决】

一、Skywalking官网 Apache SkyWalking 1.下载Skywalking APM (如果下载最新的,双击打开闪退,选老点的版本) 2. 下载 Skywalking Agents 如果下载太慢,建议复制下载链接,然后用下载器下载,比…

Python因AI水涨船高,AIGC已经造出了一个全新的赛道 |2023中国开发者调查报告出炉

CSDN、《新程序员》在去年ChatGPT横空出世之后,发起了一份围绕开发者现状、人工智能和物联网、云原生、数据库、操作系统、芯片、开源的深度调查问卷,此问卷也融合了各个领域对生成式 AI 的应用进展,最终于近日正式形成一份长达 125 页的《20…

20230802-下载并安装android-studio

下载 android-studio 安装包 https://developer.android.google.cn/studio/ 安装android-studio 双击安装包 D:\Android Studio

Android Studio新版本logcat过滤说明

按包名过滤 //输入package:(输入一个p就会有提示的) ,后面加上包名 比如: package:com.xal.runcontrol package:包名可以完整或者输部分包名即可 package:包名需要输完整准确 package~:正则表达式过滤 不了解正则表达式的可以参考&#…