当前位置: 首页 > news >正文

复盘爬虫课后练习题

项目框架

Static文件夹下是.css样式设置文件

Templates文件夹下是.html页面布局文件

App.py是编写爬虫的python模块

python详细代码

from flask import Flask, render_template, request # 从flask库导入Flask类,render_template函数和request对象
import requests  
# 导入requests库,用于发送HTTP请求
from lxml import etree  
# 从lxml库导入etree模块,用于解析HTML文档
import random  
# 导入random库,用于生成随机数app = Flask(__name__)  # 创建一个Flask应用实例
url = 'https://pvp.qq.com/web201605/herolist.shtml'  # 定义要爬取的英雄列表页面URL
headers = {  # 定义请求头,模拟浏览器访问'user-agent': # 定义自己电脑的
}def parse_url(url, headers):  # 定义解析URL的函数try:response = requests.get(url, headers=headers)  # 发送GET请求response.raise_for_status()  # 检查请求是否成功,如果不成功则抛出异常response.encoding = 'gbk'  # 设置响应的编码为gbkreturn etree.HTML(response.text)  # 将响应的文本内容转换为HTML元素,并返回except requests.RequestException as e:  # 捕获请求过程中的异常print(f"请求错误: {e}")  # 打印错误信息return None  # 如果发生异常,返回Nonedef get_details(html):  # 定义获取英雄详细信息的函数if html is not None:  # 如果HTML元素不为空hero_name = html.xpath('//ul[@class="herolist clearfix"]/li/a/text()')  # 使用XPath获取英雄名字hero_image_urls = html.xpath('//ul[@class="herolist clearfix"]/li/a/img/@src')  # 使用XPath获取英雄图片的URLreturn hero_name, hero_image_urls  # 返回英雄名字和图片URLelse:return None  # 如果HTML元素为空,返回None@app.route('/')  # 定义路由,当访问主页时触发
def home():  # 定义主页的视图函数html_content = parse_url(url, headers)  # 调用parse_url函数获取HTML内容hero_name, hero_image_url = get_details(html_content)  # 调用get_details函数获取英雄详细信息和图片URLreturn render_template('index.html', hero=zip(hero_name, hero_image_url))  # 渲染index.html模板,并传递英雄信息if __name__ == '__main__':  # 如果当前脚本作为主程序运行app.run(port=1314, debug=True)  # 启动Flask应用,设置端口号为1314,开启调试模式

运行程序

  • 后台

  • 前端

http://www.dtcms.com/a/286002.html

相关文章:

  • 前端学习8:JavaScript数据类型|声明变量|函数定义|函数参数|作用域(多个小练习上手)
  • 【三维重建】LODGE:谷歌DeepMind发布大场景超快3DGS!分层渲染,移动设备均可!
  • CentOS7 内网服务器yum修改
  • 金属伪影校正的双域联合深度学习框架复现
  • blender如何队列渲染多个工程文件的动画?
  • 声画同步!5 个音视频素材适配的网站,创作更和谐
  • 算法学习笔记:29.拓扑排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 前端埋坑之js console.log字符换行后 html没换行问题处理
  • HTML 页面禁止缩放功能
  • javascript 中数组对象操作方法
  • Paimon对比基于消息队列(如Kafka)的传统实时数仓方案的优势
  • Kafka的基本使用
  • 关于在VScode中使用git的一些步骤常用命令及其常见问题:
  • MariaDB 10.4.34 安装配置文档(Windows 版)
  • LLM(Large Language Model)大规模语言模型浅析
  • 第二篇 html5和css3开发基础与应用
  • ElasticSearch Doc Values和Fielddata详解
  • Kotlin序列
  • 外网访问基于 Git 的开源文件管理系统 Gogs
  • CentOS7下的ElasticSearch部署
  • SQL映射文件
  • elasticsearch+logstash+kibana+filebeat实现niginx日志收集(未过滤日志内容)
  • 树的重心相关概念证明
  • MyUI表单VcForm组件文档
  • 组件-多行文本省略-展开收起
  • VMC850立式加工中心Y轴传动机械结构设计cad【7张】三维图+设计说明书
  • 多模态大模型研究每日简报(2025-07-17)
  • 设计循环队列oj题(力口622)
  • 基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析
  • OSPF路由协议的协商过程