爬虫项目(12):正则、多线程抓取腾讯动漫,Flask展示数据

news/2025/2/16 2:35:32/

文章目录

    • 书籍推荐
    • 正则抓取腾讯动漫数据
    • Flask展示数据

书籍推荐

如果你对Python网络爬虫感兴趣,强烈推荐你阅读《Python网络爬虫入门到实战》。这本书详细介绍了Python网络爬虫的基础知识和高级技巧,是每位爬虫开发者的必读之作。详细介绍见👉: 《Python网络爬虫入门到实战》 书籍介绍

正则抓取腾讯动漫数据

import requests
import re
import threading
from queue import Queuedef format_html(html):li_pattern = re.compile('<li class="ret-search-item clearfix">[\s\S]+?</li>')title_pattern = re.compile('title="(.*?)"')img_src_pattern = re.compile('data-original="(.*?)"')update_pattern = re.compile('<span class="mod-cover-list-text">(.*?)</span>')tags_pattern = re.compile('<span href="/Comic/all/theme/.*?" target="_blank">(.*?)</span>')popularity_pattern = re.compile('<span>人气:<em>(.*?)</em></span>')items = li_pattern.findall(html)for item in items:title = title_pattern.search(item).group(1)img_src = img_src_pattern.search(item).group(1)update_info = update_pattern.search(item).group(1)tags = tags_pattern.findall(item)popularity = popularity_pattern.search(item).group(1)data_queue.put(f'{title},{img_src},{update_info},{"#".join(tags)},{popularity}\n')def run(index):try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}response = requests.get(f"https://ac.qq.com/Comic/index/page/{index}", headers=headers)html = response.textformat_html(html)except Exception as e:print(f"Error occurred while processing page {index}: {e}")finally:semaphore.release()if __name__ == "__main__":data_queue = Queue()semaphore = threading.BoundedSemaphore(5)lst_record_threads = []for index in range(1, 3):print(f"正在抓取{index}")semaphore.acquire()t = threading.Thread(target=run, args=(index,))t.start()lst_record_threads.append(t)for rt in lst_record_threads:rt.join()with open("./qq_comic_data.csv", "a+", encoding="gbk") as f:while not data_queue.empty():f.write(data_queue.get())print("数据爬取完毕")

Flask展示数据

上面能够实现爬取数据,但是我希望展示在前端。

main.py代码如下:

# coding= gbk
from flask import Flask, render_template
import csvapp = Flask(__name__)def read_data_from_csv():with open("qq_comic_data.csv", "r", encoding="utf-8") as f:reader = csv.reader(f)data = list(reader)[1:]  # 跳过标题行# 统一转换人气数据为浮点数(单位:亿)for row in data:popularity = row[4]if '亿' in popularity:row[4] = float(popularity.replace('亿', ''))elif '万' in popularity:row[4] = float(popularity.replace('万', '')) / 10000  # 将万转换为亿# 按人气排序并保留前10条记录data.sort(key=lambda x: x[4], reverse=True)return data[:10]@app.route('/')
def index():comics = read_data_from_csv()return render_template('index.html', comics=comics)if __name__ == '__main__':app.run(debug=True)

templates/index.html如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>漫画信息</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;color: #333;line-height: 1.6;padding: 20px;}.container {width: 80%;margin: auto;overflow: hidden;}h1 {text-align: center;color: #333;}.comic {background: #fff;margin-bottom: 20px;padding: 15px;border-radius: 10px;box-shadow: 0 5px 10px rgba(0,0,0,0.1);}.comic h2 {margin-top: 0;}.comic p {line-height: 1.25;}.comic:nth-child(even) {background: #f9f9f9;}</style>
</head>
<body><div class="container"><h1>人气前10的漫画</h1>{% for comic in comics %}<div class="comic"><h2>{{ comic[0] }}</h2><p><strong>更新信息:</strong>{{ comic[2] }}</p><p><strong>类型:</strong>{{ comic[3] }}</p><p><strong>人气:</strong>{{ comic[4] }}</p></div>{% endfor %}</div>
</body>
</html>

效果如下:
在这里插入图片描述


http://www.ppmy.cn/news/1213160.html

相关文章

加班把数据库重构完毕

加班把数据库重构完毕 本文的数据库重构是基于 clickhouse 时序非关系型的数据库。该数据库适合存储股票数据&#xff0c;速度快&#xff0c;一般查询都是 ms 级别&#xff0c;不需要异步查询更新界面 ui。 达到目标效果&#xff1a;数据表随便删除&#xff0c;重新拉数据以及指…

Git版本控制系统之分支与标签(版本)

目录 一、Git分支&#xff08;Branch&#xff09; 1.1 分支作用 1.2 四种分支管理策略 1.3 使用案例 1.3.1 指令 1.3.2 结合应用场景使用 二、Git标签&#xff08;Tag&#xff09; 2.1 标签作用 2.2 标签规范 2.3 使用案例 2.3.1 指令 2.3.2 使用示例 一、Git分支&…

【ATTCK】MITRE Caldera - 测试数据泄露技巧

CALDERA是一个由python语言编写的红蓝对抗工具&#xff08;攻击模拟工具&#xff09;。它是MITRE公司发起的一个研究项目&#xff0c;该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的&#xff0c;能够较真实地APT攻击行为模式。 通过CALDERA工具&#xff0c;安全…

YOLOV5改进:RefConv | 即插即用重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点 3.涨点效果:RefConv,实现有效涨点! 论文地址 …

boost::interprocess::message_queue 基础类库IPC进程间通信。

直接提关键点&#xff1a; 1、接收消息时必须加上超时时间 2、它是基于共享内存及命名管道实现的 3、必须确保写入消息队列的消息是正常的 4、它不是线程安全的&#xff0c;确保没有并行操作 5、其它进程打开后&#xff0c;无法关闭它创建的消息队列&#xff08;因为操作系…

7.运算符

目录 一.算数运算符 1、算术运算符 2、比较运算符 1、等号()用来判断数字、字符串和表达式是否相等。 2、安全等于运算符(<>) 3、不等于运算符(<>或者!) 4、小于或等于运算符(<) 5、小于运算符(<) 6、IS NULL(IS NULL)&#xff0c;IS NOT NULL 运算…

Java Web——前端HTML入门

目录 HTML&CSS3&JavaScript简述 1. HTML概念 2. 超文本 3. 标记语言 4. HTML基础结构 5. HTML基础词汇 6. HTML语法规则 7. VS Code 推荐使用的插件 8. 在线帮助文档 HTML&CSS3&JavaScript简述 HTML 主要用于网页主体结构的搭建&#xff0c;像一个毛坯…

基于SpringBoot+Vue的在线学习平台系统

基于SpringBootVue的在线学习平台系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 用户界面 登录界面 管理员界面 摘要 本文设计并实现了一套基于Spri…