哔哩哔哩IT私塾python爬虫视频教程中的项目文件

视频链接:
Python课程天花板,Python入门+Python爬虫+Python数据分析5天项目实操/Python基础.Python教程_哔哩哔哩_bilibili

视频教程中要访问的链接
豆瓣电影 Top 250

httpbin.org

seo推广公司网站模板_站长素材

Examples - Apache ECharts

WordCloud for Python documentation — wordcloud 1.8.1 documentation

BeautifulSoup
用于解析HTML/XML文档,提取和操纵网页数据,常用于网页抓取。

re(正则表达式库)
提供正则表达式支持,用于字符串匹配、搜索和替换,适合数据清洗和验证。

urllib
处理URL和从网络获取数据,包括打开URL、处理异常和解析URLs,便于网页数据抓取。

xlwt
将数据写入旧版Excel文件(.xls),提供创建工作簿、工作表和写入数据的API。

Flask
轻量级Web应用框架,使用WSGI,提供路由和模板引擎,适合快速开发Web应用。

jieba
中文分词库,将中文文本切分为词语,是生成词云前的重要步骤。

matplotlib
绘图库,提供丰富的绘图功能,用于显示或保存生成的图表,如词云图。

wordcloud
生成词云的库,词云中词语大小表示其在文本中的出现频率,用于文本可视化。

PIL (Pillow)
图像处理库,用于打开、操作和保存多种格式图像,常用于生成词云时的遮罩图片处理。

numpy
数学函数库,提供大型多维数组和矩阵运算支持,常用于图像处理(如转换为数组)和数据分析。

sqlite3
SQLite数据库接口库,提供轻量级、嵌入式的关系型数据库管理功能,用于数据检索和存储。

第一个项目douban(纯python项目):爬取数据并保存到xls和数据库
spider.py

# -*- coding = utf-8 -*-from bs4 import BeautifulSoup
import re
import urllib.request, urllib.error, urllib.parse
import xlwt
import sqlite3def main():baseurl = 'https://movie.douban.com/top250?start='# 1、爬取网页datalist = getData(baseurl)savepath1 = "./豆瓣电影Top250.xls"saveData(datalist,savepath1)savepath2 = "./豆瓣电影Top250.db"initDB(savepath2)saveData2DB(datalist,savepath2)# 影片链接的匹配规则
findLink = re.compile(r'<a href="(.*?)">')    # 匹配规则的正则表达式对象
# 影片图片
findImg = re.compile(r'<img.*src="(.*?)"', re.S)    #re.S忽略换行符
# 影片片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
# 影片的评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 影片评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>', re.S)
# 影片的概况
findInq = re.compile(r'<span class="inq">(.*)</span>')
# 影片的相关内容
findBd = re.compile(r'<p class="">(.*?)</p>', re.S)def getData(baseurl):datalist = []num = 0# 2、逐一解析数据for i in range(0, 25):   # 调用获取页面信息的函数 10次url = baseurl + str(i*25)html = askURL(url)  # 保存获取到的单个页面的网页源码# html = urllib.request.urlopen(url).read()# 逐一解析数据soup = BeautifulSoup(html, 'html.parser')for item in soup.find_all("div", class_="item"):# 定位获取所需的标签内容# print(item) # 测试:单个电影itemdata = []item = str(item)link = re.findall(findLink, item)[0].replace('\xa0', "")    # \xa0(不间断空白符)data.append(link)imgSrc = re.findall(findImg, item)[0].replace('\xa0', "")data.append(imgSrc)title = re.findall(findTitle, item)if(len(title) >= 2):ctitle = title[0].replace('\xa0', "")data.append(ctitle)ftitle = title[1].replace('/',"").replace('\xa0', "")data.append(ftitle)elif(len(title) == 1):data.append(title[0].replace('\xa0', ""))data.append(" ")    # 第二个名称留空rating = re.findall(findRating, item)[0].replace('\xa0', "")data.append(rating)judge = re.findall(findJudge, item)[0].replace('\xa0', "")data.append(judge)inq = re.findall(findInq, item)if len(inq) != 0:inq = inq[0].replace('。',"").replace('\xa0', "")data.append(inq)else:data.append(" ")bd = re.findall(findBd, item)[0].replace('\xa0', "")bd = re.sub(r'<br(\s+)?/>(\s+)?', " ", bd)bd = re.sub('/', ' ', bd)data.append(bd.strip())if data:num +=1datalist.append(data)print(datalist)print(num)return datalist# 得到指定一个URL的网页内容
def askURL(url):# 模拟浏览器头部信息head = {    # 这里访问的是www.douban.com,加上cookie才成功访问,不然会403"cookie":'''bid=lmDVVK_MwCE; dbcl2="287312225:gaIljLl3paE"; ck=A87B; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1740403496%2C%22https%3A%2F%2Faccounts.douban.com%2F%22%5D; _pk_id.100001.4cf6=c5aee2ffb5a4b0b1.1740403496.; push_noty_num=0; push_doumail_num=0; __yadk_uid=FMUehx3EWLsxQlgs8OU0iEQf5rgnlRfM''',"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0" }# 用户代理: 表示告诉浏览器我们是什么类型的机器、浏览器(我们能接受什么信息)req = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(req)html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e, 'code'):  # hasattr 含有指定变量与否print(e.code)if hasattr(e, 'reason'):print(e.reason)return htmldef saveData(datalist,savepath):print("save...")book = xlwt.Workbook(encoding='utf-8', style_compression = 0)sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)col = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概括", "相关信息")for i in range(0, 8):sheet.write(0, i, col[i])for i in range(0,250):print("第%d条"%(i+1))data = datalist[i]for j in range(0,8):sheet.write(i+1, j, data[j])book.save(savepath)def saveData2DB(datalist,savepath):conn = sqlite3.connect(savepath)c = conn.cursor()print("豆瓣电影-------------------------------------------",len(datalist))for data in datalist:for i in range(len(data)):if i == 4 or i == 5:passelse:data[i] = '"'+str(data[i])+'"'sql = '''insert into movie250 (info_link,pic_link,cname,fname,score,rated,instroduction,relax_info)values (%s)'''%",".join(data)print(sql)c.execute(sql)conn.commit()conn.close()print("成功保存到数据库")def initDB(dbpath):sql = '''create table if not exists movie250 (id integer primary key autoincrement,info_link text,pic_link text,cname varchar,fname varchar,score numeric,rated numeric,instroduction text,relax_info text)'''conn = sqlite3.connect(dbpath)c = conn.cursor()c.execute(sql)conn.commit()conn.close()if __name__ == '__main__':main()

第二个项目douban_flask(flask项目):把第一个项目得到的数据库文件的数据可视化
这里只给出python文件,其他文件看教程视频自行下载或看上传的资源又或者GitHub - chenzanhong/Douban_DataVis: 把项目douban获取到的数据(movie.db)可视化:
app.py:

from flask import Flask,render_template
import sqlite3app = Flask(__name__)@app.route('/')
def index():  # put application's code herereturn render_template('index.html')@app.route('/index')
def home():  # put application's code herereturn render_template('index.html')# return index()    # 请求转发@app.route('/movie')
def movie():  # put application's code heredatalist = []conn = sqlite3.connect('豆瓣电影Top250.db')c = conn.cursor()sql = '''select * from movie250'''data = c.execute(sql)for item in data:datalist.append(item)c.close()conn.close()return render_template('movie.html', movies=datalist)@app.route('/score')
def score():  # put application's code herescore = []  # 评分num = []    # 每个评分的电影数conn = sqlite3.connect('豆瓣电影Top250.db')c = conn.cursor()sql = '''select score,count(score) from movie250 group by score'''data = c.execute(sql)for item in data:score.append(item[0])num.append(item[1])c.close()conn.close()return render_template('score.html', score=score, num=num)@app.route('/word')
def word():  # put application's code herereturn render_template('word.html')@app.route('/team')
def team():  # put application's code herereturn render_template('team.html')if __name__ == '__main__':app.run()

test_WordCloud.py:

import jieba    # 分词# 设置 Matplotlib 后端(如果需要)
import matplotlib
matplotlib.use('TkAgg')  # 或者 'Agg', 'Qt5Agg', 等,取决于你的系统支持from matplotlib import pyplot as plt    # 绘图,数据可视化
from wordcloud import WordCloud # 词云
from PIL import Image   # 图片处理
import numpy as np  # 矩阵运算
import sqlite3  # 数据库# 准备词云所需的句子
conn = sqlite3.connect('豆瓣电影Top250.db')
c = conn.cursor()
sql = '''select instroduction from movie250'''
data = c.execute(sql)
text = ""
for item in data:text += item[0]# print(item[0])
print(text)
c.close()
conn.close()# 分词
cut = jieba.cut(text)
str = ' '.join(cut)
print(len(str))# 准备
img = Image.open(r'static\assets\img\b.jpg') # 打开遮罩图片
img_array = np.array(img)   # 将图片转换为数据
wc = WordCloud(background_color = 'white',mask = img_array,font_path = r"C:\Windows\Fonts\STXINWEI.TTF",    # 改为自己电脑下的路径scale = 4,  # 缩放# width# height)
wc.generate_from_text(str)# 绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis('off') # 是否显示坐标轴
# plt.show()  # 显示生成的图片
plt.savefig(r'static\assets\img\b2wc.jpg',dpi=500)  # dpi为清晰度,可选

效果:
 

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

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

相关文章

go前后端开源项目go-admin,本地启动

https://github.com/go-admin-team/go-admin 教程 1.拉取项目 git clone https://github.com/go-admin-team/go-admin.git 2.更新整理依赖 go mod tidy会整理依赖&#xff0c;下载缺少的包&#xff0c;移除不用的&#xff0c;并更新go.sum。 # 更新整理依赖 go mod tidy 3.编…

深入理解Spring @Async:异步编程的利器与实战指南

一、为什么需要异步编程&#xff1f; 在现代高并发系统中&#xff0c;同步阻塞式编程会带来两大核心问题&#xff1a; // 同步处理示例 public void processOrder(Order order) {// 1. 保存订单&#xff08;耗时50ms&#xff09;orderRepository.save(order); // 2. 发送短信…

PHP:IDEA开发工具配置XDebug,断点调试

文章目录 一、php.ini配置二、IDEA配置 一、php.ini配置 [xdebug] zend_extension"F:\wamp64\bin\php\php7.4.0\ext\php_xdebug-2.8.0-7.4-vc15-x86_64.dll" xdebug.remote_enable on xdebug.remote_host 127.0.0.1 xdebug.remote_port 9001 xdebug.idekey"…

FPGA开发,使用Deepseek V3还是R1(9):FPGA的全流程(详细版)

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

AtCoder Beginner Contest 001(A - 積雪深差、B - 視程の通報、C - 風力観測、D - 感雨時刻の整理)题目翻译

由于我发现网上很少有人会发很久之前AtCoder Beginner Contes的题&#xff0c;所以我打算从AtCoder Beginner Contest 001开始写。大约两周一更&#xff0c;需要的可以订阅专栏&#xff0c;感谢支持Thanks♪(&#xff65;ω&#xff65;)&#xff89; →题目讲解 A - 積雪深差 …

upload

&#xff08;上传一句话木马&#xff0c;用蚁剑链接验证是否成功/传有回显的&#xff1a;<?php phpinfo();?>&#xff09; 学看代码 #function checkfile(){}&#xff1a;定义了一个名叫checkfile的函数 #var file方法.(获取名为‘upload_file’的元素)[获取哪些&…

【漫话机器学习系列】110.线性可分(Linearly Separable)

线性可分与线性不可分的概念详解 1. 引言 在机器学习和模式识别领域&#xff0c;分类问题是一个重要的研究方向。在分类任务中&#xff0c;我们通常需要将不同类别的数据点分开&#xff0c;而如何进行分割是一个关键问题。线性可分&#xff08;Linearly Separable&#xff09…

5G学习笔记之BWP

我们只会经历一种人生&#xff0c;我们选择的人生。 参考&#xff1a;《5G NR标准》、《5G无线系统指南:如微见著&#xff0c;赋能数字化时代》 目录 1. 概述2. BWP频域位置3. 初始与专用BWP4. 默认BWP5. 切换BWP 1. 概述 在LTE的设计中&#xff0c;默认所有终端均能处理最大2…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火&#xff0c;试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下&#xff0c;在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库&#xff0c;实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.2倒排索引原理与分词器(Analyzer)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 1.2.2倒排索引原理与分词器&#xff08;Analyzer&#xff09;1. 倒排索引&#xff1a;搜索引擎的基石1.1 正排索引 vs 倒排索引示例数据对比&#xff1a; 1.2 倒排索引核心结…

计算机毕业设计SpringBoot+Vue.js线上辅导班系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

大模型原理与技术(毛玉仁)

一、基础知识 ①基于统计的语言模型&#xff1a;n-gram&#xff0c;基于前n-1个词预测第当前词&#xff0c;即统计词序个数计算概率&#xff08;n阶马尔科夫&#xff09;。如果预测句子的概率&#xff0c;需要将每个分词连乘。 常用的n小于5&#xff0c;随着n增大&#xff0c;…

ollama本地部署DeepSeek-R1大模型使用前端JS调用的详细流程

以下是关于如何在本地部署 DeepSeek-R1 大模型&#xff08;通过 Ollama&#xff09;&#xff0c;并使用前端 JavaScript 调用其功能的详细流程。 前提条件 硬件要求&#xff1a; 建议至少 16GB RAM&#xff08;运行较小模型如 1.5B 或 7B 参数版本&#xff09;&#xff0c;如果…

最好Wordpree+Apache+PHP安装教程

前提需要 PHP的安装最少需要7.4以上Mysql的安装&#xff0c;直接默认最新版就行APache服务器&#xff08;HTTP服务器&#xff0c;只有用这个你的软件才能在服务器上运行&#xff09; 安装apache 安装 sudo apt install apache2查看防火墙 sudo ufw app list如果有 Apache那…

deepseek使用记录18——文化基因之文化融合

文明长河中的生命浪花 在洛阳白马寺的银杏树下&#xff0c;年轻母亲指着"农禅并重"碑刻给孩子讲述祖辈耕作的故事&#xff1b;在哔哩哔哩的直播间里&#xff0c;00后女孩穿着汉服跳起街舞&#xff0c;弹幕飘过"这才是文化缝合怪"。当文明交融的宏大叙事照…

2025 GDC开发者先锋大会“人形机器人的开源之路”分论坛 | 圆桌会议:《开放协作:开源生态如何解锁人形机器人与具身智能的未来》(上篇)

在GDC全球开发者先锋大会期间&#xff0c;2月23日&#xff0c;由GDC组委会指导、国家地方共建人形机器人创新中心&#xff08;以下简称“国地中心”&#xff09;承办的“人形机器人的开源之路”主题论坛在上海西岸艺术中心成功举办。 在人工智能与机器人技术飞速发展的今天&…

txt 转 json 使用python语言

需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…

快速入手-搭建Flask框架封装mysql并结合业务实际情况使用

1、安装包 pip install pymysql pip install dbutils 2、项目目录结构&#xff0c;注意目录的层级 3、在flask_project文件夹里创建__init__.py from flask import Flask, redirect, request, session def auth():# 拦截器print("拦截器")# js、css、img不拦截处…

【语法】C++中string类中的两个问题及解答

贴主在学习string类时遇到过两个困扰我的问题&#xff0c;今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中&#xff0c;调用的是这个string对象的容量(可以存多少个有效字符)&#xff0c;而size()是调用的string对象现在有…

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair 题目 分析一、pair1.1pair与vector的区别1.2 两者使用场景两者组合使用 二、set2.1核心特点2.2set的基本操作2.3 set vs unordered_set示例&#xff1a;统计唯一单词数代码 题目 分析 大佬写的很明白&#xff0c;看这儿 我讲讲…