一、电影天堂的网址(url)

电影天堂_免费电影_迅雷电影下载_电影天堂网最好的迅雷电影下载网,分享最新电影,高清电影、综艺、动漫、电视剧等下载!https://dydytt.net/index.htm

我们要爬取这个页面上的内容

二、代码详情解释和介绍功能中所用到的知识点

这个代码涵盖了以下主要知识点:

  1. HTTP 请求与响应处理。

  2. HTML 解析与 XPath 使用。

  3. 字符串处理与数据格式化。

  4. 异常处理与程序健壮性。

  5. 列表、字典与数据结构操作。

  6. 编码处理与国际化支持。

  7. 请求间隔与反爬虫策略。

  8. 函数定义与模块化编程。

  9. 日志输出与调试技巧。

import requests
from lxml import etree
import time
import warnings# 禁用 SSL 警告
warnings.filterwarnings("ignore", category=requests.packages.urllib3.exceptions.InsecureRequestWarning)# 请求头,模拟浏览器访问
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer': 'https://dydytt.net/','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive',
}# 基础域名
BASE_DOMAIN = "https://dydytt.net"def get_detail_urls(url):"""获取电影详情页的 URL"""try:# 发送 HTTP 请求response = requests.get(url, headers=HEADERS, verify=False)response.raise_for_status()  # 检查请求是否成功# 解码响应内容(电影天堂使用 gbk 编码)text = response.content.decode("gbk", "ignore")# 使用 lxml 解析 HTMLhtml = etree.HTML(text)# 提取电影详情页的链接detail_urls = html.xpath("//div[@class='co_content8']//table//a/@href")# 将相对路径转换为完整 URLdetail_urls = [BASE_DOMAIN + url if url.startswith("/") else BASE_DOMAIN + "/" + url for url in detail_urls]return detail_urlsexcept Exception as e:print(f"Error fetching detail URLs: {e}")return []def parse_detail(url):"""解析电影详情页,提取电影信息"""try:# 发送 HTTP 请求response = requests.get(url, headers=HEADERS, verify=False)response.raise_for_status()  # 检查请求是否成功# 解码响应内容text = response.content.decode("gbk", "ignore")# 使用 lxml 解析 HTMLhtml = etree.HTML(text)# 提取电影标题title_elements = html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")title = title_elements[0] if title_elements else "未知标题"# 提取电影图片image_elements = html.xpath("//div[@id='Zoom']//img/@src")image = image_elements[0] if image_elements else "未知图片"# 提取电影信息(年份、评分、导演、主演、简介等)infos = html.xpath("//div[@id='Zoom']//text()")movie_info = {}for info in infos:info = info.strip()if info.startswith("◎年 代"):movie_info["year"] = info.replace("◎年 代", "").strip()elif info.startswith("◎豆瓣评分"):movie_info["score"] = info.replace("◎豆瓣评分", "").strip()elif info.startswith("◎片 长"):movie_info["duration"] = info.replace("◎片 长", "").strip()elif info.startswith("◎导 演"):movie_info["director"] = info.replace("◎导 演", "").strip()elif info.startswith("◎主 演"):movie_info["actors"] = info.replace("◎主 演", "").strip()elif info.startswith("◎简 介"):movie_info["profile"] = info.replace("◎简 介", "").strip()# 提取下载链接downurl_elements = html.xpath("//td[@bgcolor='#fdfddf']/a/@href")downurl = downurl_elements[0] if downurl_elements else "未知下载链接"# 返回电影信息return {"title": title,"image": image,**movie_info,"downurl": downurl,}except Exception as e:print(f"Error parsing detail page: {e}")return Nonedef spider():"""主爬虫函数"""# 基础 URL(电影列表页)base_url = "https://dydytt.net/index.htm"movies = []# 获取电影详情页的 URLprint("Fetching movie list from:", base_url)detail_urls = get_detail_urls(base_url)# 遍历每个详情页,提取电影信息for detail_url in detail_urls:print("Fetching movie details from:", detail_url)time.sleep(5)  # 增加请求间隔,避免被封禁movie = parse_detail(detail_url)if movie:movies.append(movie)# 打印所有电影信息for movie in movies:print(movie)if __name__ == '__main__':spider()

代码爬虫成功标志:

这个代码涉及多个 Python 编程和网络爬虫的知识点。以下是代码中用到的关键知识点及其作用:


1. HTTP 请求 (requests 库)

  • 作用:发送 HTTP 请求,获取网页内容。

  • 知识点

    • requests.get(url, headers=headers, verify=False):发送 GET 请求,获取网页内容。

    • response.content:获取响应的二进制内容。

    • response.text:获取响应的文本内容(自动解码)。

    • response.raise_for_status():检查请求是否成功,失败时抛出异常。


2. HTML 解析 (lxml 和 etree)

  • 作用:解析 HTML 文档,提取所需的数据。

  • 知识点

    • etree.HTML(text):将 HTML 文本转换为可解析的 etree 对象。

    • html.xpath("XPath表达式"):使用 XPath 表达式定位 HTML 元素。

    • 示例:html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()") 提取电影标题。


3. XPath 表达式

  • 作用:用于定位 HTML 文档中的特定元素。

  • 知识点

    • //:从根节点开始查找。

    • [@属性名='值']:根据属性值筛选元素。

    • /text():提取元素的文本内容。

    • /@属性名:提取元素的属性值。

    • 示例://div[@class='co_content8']//table//a/@href 提取电影详情页的链接。


4. 字符串处理

  • 作用:清理和格式化提取的数据。

  • 知识点

    • str.strip():去除字符串两端的空白字符。

    • str.replace(old, new):替换字符串中的部分内容。

    • 示例:info.replace("◎年 代", "").strip() 提取电影年份。


5. 异常处理 (try-except)

  • 作用:捕获和处理程序运行中的异常,避免程序崩溃。

  • 知识点

    • try:尝试执行可能出错的代码。

    • except:捕获异常并处理。

    • 示例:捕获 requests.get 的异常,防止网络请求失败导致程序崩溃。


6. 列表和字典操作

  • 作用:存储和处理提取的数据。

  • 知识点

    • list.append(item):向列表中添加元素。

    • dict[key] = value:向字典中添加键值对。

    • 示例:movies.append({"title": title, "href": href}) 将电影信息存储到列表中。


7. 编码处理

  • 作用:正确处理网页的编码问题。

  • 知识点

    • response.content.decode("gbk", "ignore"):将二进制内容解码为文本,忽略无法解码的字符。

    • 电影天堂使用 gbk 编码,必须正确解码才能获取可读的文本内容。


8. 请求间隔 (time.sleep)

  • 作用:避免频繁请求导致被封禁。

  • 知识点

    • time.sleep(seconds):暂停程序执行指定的秒数。

    • 示例:time.sleep(5) 每次请求后暂停 5 秒。


9. 禁用 SSL 验证

  • 作用:忽略 SSL 证书验证,避免 HTTPS 请求失败。

  • 知识点

    • requests.get(verify=False):禁用 SSL 验证。

    • warnings.filterwarnings("ignore", category=InsecureRequestWarning):禁用 SSL 警告。


10. 函数定义与调用

  • 作用:将代码模块化,提高可读性和复用性。

  • 知识点

    • def function_name(parameters)::定义函数。

    • function_name(arguments):调用函数。

    • 示例:get_detail_urls(url) 获取电影详情页的 URL。


11. 循环与条件判断

  • 作用:遍历数据并根据条件执行不同的操作。

  • 知识点

    • for item in list::遍历列表中的每个元素。

    • if condition::根据条件执行代码。

    • 示例:遍历电影详情页的 URL 并解析每个页面。


12. 日志输出 (print)

  • 作用:打印程序运行状态和结果,便于调试。

  • 知识点

    • print(message):输出信息到控制台。

    • 示例:print("Fetching movie list from:", base_url) 打印当前正在处理的 URL。


13. 模块导入 (import)

  • 作用:引入外部库或模块,扩展 Python 的功能。

  • 知识点

    • import requests:导入 requests 库。

    • from lxml import etree:从 lxml 库中导入 etree 模块。

    • import time:导入 time 模块。


14. URL 拼接

  • 作用:将相对路径转换为完整 URL。

  • 知识点

    • BASE_DOMAIN + url:拼接基础域名和相对路径。

    • 示例:BASE_DOMAIN + "/" + url 处理相对路径。


15. 默认值处理

  • 作用:在数据缺失时提供默认值,避免程序崩溃。

  • 知识点

    • list[0] if list else "默认值":如果列表不为空,返回第一个元素,否则返回默认值。

    • 示例:title_elements[0] if title_elements else "未知标题" 处理电影标题缺失的情况。

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

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

相关文章

【C++】:STL详解 —— 红黑树封装map和set

目录 红黑树的源代码 正向迭代器的代码 反向迭代器的代码 set的模拟实现 map的模拟实现 红黑树的源代码 #pragma once #include <iostream>using namespace std; // set ->key // map ->key/value// set ->key // map ->key/valueenum Colour {RED,BLAC…

MATLAB控制函数测试要点剖析

一、功能准确性检验 基础功能核验 针对常用控制函数&#xff0c;像用于传递函数建模的 tf 、构建状态空间模型的 ss &#xff0c;以及开展阶跃响应分析的 step 等&#xff0c;必须确认其能精准执行基础操作。以 tf 函数为例&#xff0c;在输入分子与分母系数后&#xff0c;理…

MoonSharp 文档一

目录 1.Getting Started 步骤1&#xff1a;在 IDE 中引入 MoonSharp 步骤2&#xff1a;引入命名空间 步骤3&#xff1a;调用脚本 步骤4&#xff1a;运行代码 2.Keeping a Script around 步骤1&#xff1a;复现前教程所有操作 步骤2&#xff1a;改为创建Script对象 步骤…

ROS云课三分钟-差动移动机器人导航报告如何撰写-及格边缘疯狂试探

提示词&#xff1a;基于如上所有案例并结合roslaunch teb_local_planner_tutorials robot_diff_drive_in_stage.launch和上面所有对话内容&#xff0c;设计一个差速移动机器人仿真实验&#xff0c;并完成报告的全文撰写。 差速移动机器人导航仿真实验报告 一、实验目的 验证 T…

ACE协议学习1

在多核系统或复杂SoC&#xff08;System on Chip&#xff09;中&#xff0c;不同处理器核心或IP&#xff08;Intellectual Property&#xff09;模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议&#xff08;Advanced Microcontroller Bu…

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术&#xff0c;所以首先需要配置一个后端服务&#xff0c;可以使用node.js和express。 首先生成一个空项目&#xff0c;新建main目录…

Java 字节码操纵框架 -ASM

Java 字节码操纵框架 -ASM 1.ASM 概述: ASM 是用于 Java 字节码操纵的框架,可动态生成新类或增强现有类的功能。它既能直接产生二进制 class 文件,也能在类被加载到虚拟机之前动态改变类行为,通过读取类文件信息来分析、修改类行为,甚至生成新类。许多流行框架如 cglib、…

kafka + flink +mysql 案例

假设你有两个Kafka主题&#xff1a;user_activities_topic 和 product_views_topic&#xff0c;并且你希望将user_activities_topic中的数据写入到user_activities表&#xff0c;而将product_views_topic中的数据写入到product_views表。 maven <dependencies><!-- …

远程登录客户端软件 CTerm 发布了 v4.0.0

有时候我们需要远程登录到 Linux/Unix 服务器&#xff0c;这方面使用最广泛的客户端软件是 PuTTY&#xff0c;不过它是全英文的&#xff0c;而且是单窗口的&#xff0c;有时候显得不那么方便。 CTerm (Clever Terminal) 是一个 Windows 平台下支持 Telnet 和 SSH 协议进行远程…

从李佳琦团队看新型用工:灵活就业如何重构组织架构?

2022年“双11”期间&#xff0c;李佳琦直播间累计销售额突破115亿元&#xff08;来源&#xff1a;新腕数据《2022双11直播电商战报》&#xff09;&#xff0c;其背后团队规模约400人&#xff0c;但全职员工仅占35%&#xff0c;其余65%为外包选品团队、兼职客服、第三方MCN机构人…

微软程序的打包格式MSIX

MSIX 微软推出的MSIX格式是其为统一Windows应用程序打包和部署而设计的新一代安装包格式&#xff0c;具有以下核心特点和进展&#xff1a; 1. 推出背景与时间线 MSIX最初于2018年在微软Build大会上宣布&#xff0c;并在同年7月发布预览版打包工具&#xff0c;10月正式版上线…

AFL++安装

学习fuzzing也几天了&#xff0c;今天记录AFL的安装及使用 一、实验环境 虚拟机&#xff1a;ubuntu20.04 当然也可以uname -a去看自己的版本号 二、AFL安装 1.先更新一下工具 sudo apt update2.安装AFL必要的一些依赖&#xff0c;例如编译工具&#xff08;如 build-essen…

【STM32】ADC功能-单通道多通道(学习笔记)

本章结合上一节内容复习更好理解【江协科技STM32】ADC数模转换器-学习笔记-CSDN博客 一、ADC单通道 接线图 ADC初始化 ①RCC开启时钟&#xff0c;包括ADC和GPIO的时钟&#xff0c;另外ADCCLK的分频器也要配置 ②配置GPIO,&#xff0c;把需要用的GPIO配置成模拟输入模式&am…

基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

当前主流的大模型训练与推理框架的全面汇总

以下是当前主流的大模型训练与推理框架的全面汇总 以下是更新后包含 SGLang 的大模型训练与推理框架列表&#xff0c;并对分类和示例进行了优化&#xff1a; 一、通用深度学习推理框架 TensorRT-LLM 特点&#xff1a;NVIDIA推出的针对Transformer类模型的优化框架&#xff0c;支…

Linux学习(八)(服务管理(检查服务状态,开始/停止服务,检查服务日志,创建新服务))

服务管理 Linux 中的服务管理是指控制 Linux 在启动和关闭计算机的过程中启动和停止的服务&#xff08;或“守护程序”&#xff09;的系统。这些服务执行各种功能&#xff0c;并提供未附加到用户界面的进程。 Linux 系统&#xff0c;尤其是系统管理员&#xff0c;通常需要管理…

ElasticSearch 分词器介绍及测试:Standard(标准分词器)、English(英文分词器)、Chinese(中文分词器)、IK(IK 分词器)

ElasticSearch 分词器介绍及测试&#xff1a;Standard&#xff08;标准分词器&#xff09;、English&#xff08;英文分词器&#xff09;、Chinese&#xff08;中文分词器&#xff09;、IK&#xff08;IK 分词器&#xff09; ElasticSearch 分词器介绍及测试1. Standard Analyz…

【计算机网络】确认家庭网络是千兆/百兆带宽并排查问题

要确认你的带宽是千兆&#xff08;1000Mbps&#xff09;还是百兆&#xff08;100Mbps&#xff09;&#xff0c;可以通过以下方法逐步排查&#xff1a; 一、检查物理设备 1. 查看路由器和光猫的网口 千兆网口&#xff1a;路由器或光猫的网口旁通常会标注 “10/100/1000M” 或 …

[数据分享第七弹]全球洪水相关数据集

洪水是一种常见的自然灾害&#xff0c;在全球范围内造成了极为严重的威胁。近年来&#xff0c;针对洪水事件的检测分析&#xff0c;以及对于洪水灾害和灾后恢复能力的研究日渐增多&#xff0c;也产生了众多洪水数据集。今天&#xff0c;我们一起来收集整理一下相关数据集。&…

深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势

首先&#xff0c;让我们一起回顾运维的进化之路&#xff0c;然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前&#xff0c;我们称之为传统运维&#xff0c;其主要特点是&#xff1a; 人工驱动…