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

一、首先我们先看要求

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 += 1print("="*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 responseimport 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 += 1print("="*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.mzph.cn/news/18950.shtml

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

相关文章

Socket本质、实战演示两个进程建立TCP连接通信的过程

文章目录 Socket是什么引入面试题, 使你更深刻的理解四元组 Socket网络通信大体流程实战演示TCP连接建立过程需要用到的linux 查看网络的一些命令测试的程序一些准备工作启动服务端, 并没有调用accept启动客户端开启服务accept Socket是什么 通俗来说,Socket是套接字,是一种编…

InnoDB引擎底层逻辑讲解——架构之磁盘架构

1. System Tablespaces区域 系统表空间是change buffer(更改缓冲区)的存放区域,这是在8.0之后重新规划的,在5.x版本的时候,系统表空间还会存放innodb的数据字典undolog日志等信息,在8.0之后主要主要存放更…

Gitlab CI/CD笔记-第一天-GitOps和以前的和jenkins的集成的区别

一、GitOps-CI/CD的流程图 简单解释: 1.提交代码 2.编译构建 3.测试 4.部署 二、gitlab的实现 1、Runer 1.这个就是jenkins里的worker-slave的角色, 2.git-lab server 下发任务,Runner执行。 3.这个R…

关于样本方差为什么除以 n-1

今天上午集训摸鱼看到同学给我发的这个问题感觉挺有意思的 感性理解 这一部分的内容仅代表本蒟蒻没看严谨证明之前的个人见解,如果您想看严谨的证明,请翻到下一部分 还是先把图放上来罢省的有人不知道讲的什么东西 呃我知道这是生物竞赛的东西&#…

下载列表视频的具体操作

主要是介绍怎样获取上篇博客需要的HAR文件和请求域名

docker: Error response from daemon: No command specified.

执行 docker run -it -d -v /home/dell/workspace/workspace/test_192.168.1.202_pipeline:/home/workspace1 --name test_192.168.1.202_pipeline_10 qnx:7.1报错 问题定位:export导入的镜像需要带上command,以下命令查看command信息 docker ps --no…

十进制、八进制、二进制、十六进制

十进制 每一位都有 0~9 十个数码,逢十进一 二进制 每一位仅有 0 和 1 两个数码,逢二进一 八进制 每一位都有 0~7 八个数码,逢八进一 十六进制 每一位都有 0~9、A(10)、B(11)、C(12)、D(13)、E(14)、F(15),十六个数码&#…

牛客网Verilog刷题——VL53

牛客网Verilog刷题——VL53 题目答案 题目 设计一个单端口RAM,它有: 写接口,读接口,地址接口,时钟接口和复位;存储宽度是4位,深度128。注意rst为低电平复位。模块的接口示意图如下。 输入输出描…

【A200】Ubuntu18.04 + ROS-Melodic + 比业电子VISIOSCAN雷达 评测

大家好,我是虎哥,朋友介绍,有一款单线激光雷达,25米的检测距离,有80HZ的扫描频率,而且角度分辨率最高可以到0.1,这个参数我确实没有见过,所以立刻着手从厂家那申请到了VISIOSCAN雷达…

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks (Java 虚拟机栈) 每个线程运行时所需要的内存,称为虚拟机栈每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动…

机房断网断电监测网关支持远程告警

RTU5028E网络故障监测终端是一款功能强大且方便实用的设备,集合了断网、断电、网线故障报警功能。它支持同时监测多达7台网络设备,可以帮助用户快速定位远程网络设备离线的原因。此外,它还具备自动重启和远程重启网络设备的功能,为…

思科模拟器配置静态路由(下一跳使用IP)

Router0配置代码:##端口配置 Router(config)#int fastEthernet 0/0 Router(config-if)#ip address 192.168.10.254 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#int fastEthernet 0/1 Router(config-if)#ip address 192.168.20.1 255.255.255.2…

深度剖析数据在内存中的存储

目录 数据类型介绍 类型的基本归类 整形家族: 浮点数家族: 构造类型: 指针类型 空类型: 整形在内存中的存储 原码、反码、补码 大小端介绍 什么大端小端: 为什么有大端和小端: 练习 浮点型在内存中的储存 一个例子 浮点数存储规则 数据类型介绍 前面我们…

Windows同时安装两个版本的JDK并随时切换,以JDK6和JDK8为例,并解决相关存在的问题(亲测有效)

Windows同时安装两个版本的JDK并随时切换,以JDK6和JDK8为例,并解决相关存在的问题(亲测有效) 1.下载不同版本JDK 这里给出JDK6和JDK的百度网盘地址,具体安装过程,傻瓜式安装即可。 链接:http…

【Linux】用户相关内容

如果命令ll 出现以上信息,UID为具体的数字,代表之前UID为502的用户被删除了。 更改目录或文件所属用户和所属组 在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户。 更改所属用户 chown 用户名 文件名/目录名 更…

VisualStudioWindows下 远程调试

前置条件 1、调试方与被调试方,以下简称调试方为A,被调试方为B。A与B双方能相互ping通 2、B需要运行RemoteDebugger服务,该程序位于C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Remote Debugger下。 我这里是安装…

基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

总线锁 总线锁就是使用处理器提供的一个 LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁!! 如果多个 处 理器同 时对 …

windows下的txt文档,传到ubuntu后,每行后面出现^M,怎么处理?

问题背景:windows下pycharm生成的txt文档,传到ubuntu后,每行后面出现^M 用vim打开显示 使用cat -A filename显示如下 参考https://www.lmlphp.com/user/16697/article/item/579325/给出的几种方法 方法一、dos2unix filename。服务器没装…

配置IPv6 over IPv4手动隧道示例

组网需求 如图1所示,两台IPv6主机分别通过SwitchA和SwitchC与IPv4骨干网络连接,客户希望两台IPv6主机能通过IPv4骨干网互通。 图1 配置IPv6 over IPv4手动隧道组网图 配置思路 配置IPv6 over IPv4手动隧道的思路如下: 配置IPv4网络。配置接…

iptables防火墙、filter表控制、扩展匹配、使用iptables配置网络型防火墙、NAT原理、配置SNAT

day05 day05iptables防火墙filter表filter中的三条链环境准备iptables操作验证FORWARD链准备环境配置FORWARD链NAT配置SNAT iptables iptables有多种功能,每一种功能都用一张表来实现最常用的功能是防火墙和NAT从RHEL7开始,默认的防火墙为firewalld&a…