基于python利用requests库获取dy2018下载信息,快捷获取最新电影
创始人
2024-11-06 07:10:46
0

项目介绍

 

本项目是本人的课设,实用性很强,对于喜欢看电影的朋友来说可以快捷获取最新电影的下载信息(相关网址dy2018.com)

电影 / 最新电影_电影天堂-迅雷电影下载

环境搭建

python:3.10.0

request、lxml

步骤详解

依赖:

正则、requset、lxml

import requests import re from lxml import etree

创建类并初始化:

请求地址为目标网站:

class dy2018:     def __init__(self):         """初始化"""         # 请求地址         self.url = "https://www.dy2018.com/html/gndy/dyzz/index.html"         # 请求头         self.header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}         # 代理         self.proxies = {"HTTP": "117.114.149.66:55443"}

请求函数:

网站编码为GBK:

    def get_response(self, url):         """发送请求并获取响应"""         return requests.get(url=url, headers=self.header).content.decode("GBK")

解析函数:

在第一级页面用xpath定位每条电影链接:

 获取的地址不能直接用,可以点击任意两个链接查看它们的特征:

 

 

 得出结论,下一级网址 = dy2018.com/ + href元素的地址,

调用请求函数,得到html信息,调用打印函数。

    def parse_list_data(self, html):         """解析数据"""         # 1.创建查找对象         html_node = etree.HTML(html)         # 2. 查找父节点div         div_node = html_node.xpath('//div[@class="co_content8"]/ul')[0]         # 3. 查找table节点         all_table_nodes = div_node.xpath('//table[@class="tbspan"]')         # 4. 遍历每一个table节点         for table_node in all_table_nodes:             # 地址前缀             base_url = "https://www.dy2018.com"             # 取后缀地址             path = table_node.xpath(".//tr[2]//b/a/@href")[0]             # 连接地址前缀和后缀             movie_detail_url = base_url + path             # 发送详情页请求             movie_detail_html = self.get_response(movie_detail_url)              # print(movie_detail_html)              self.print_list_data(movie_detail_html)

打印函数:

定义正则:

通过观察特征可以看出电影信息前缀都有一个固定的字符串:

◎译  名

◎片  名

◎年  代

...

最后,最重要的是电影的下载链接:

观察这个链接的特征,

发现这个链接是以“magnet:\?xt=urn:btih:”开头的,但是确获取了多个值,有的链接是无法下载的,为了准确获取的值,我们直接在html中找出特征:

我们发现有效链接是以a href=为开头,&tr为结尾的,根据这个特征定义正则: 

r'a href="(magnet:\?xt=urn:btih:.*?)&tr='

根据正则去匹配信息,

打印电影信息。

    def print_list_data(self, page_data):         """打印数据"""         # 定义正则表达式模式         patterns = {             "译名": r"◎译\s* \s*名\s+(.*?)
", "片名": r"◎片\s* \s*名\s+(.*?)
", "年代": r"◎年\s* \s*代\s+(.*?)
", "产地": r"◎产\s* \s*地\s+(.*?)
", "类别": r"◎类\s* \s*别\s+(.*?)
", "语言": r"◎语\s* \s*言\s+(.*?)
", "上映日期": r"◎上映日期\s+(.*?)
", "豆瓣评分": r"◎豆瓣评分\s+(.*?)
", "torrent": r'a href="(magnet:\?xt=urn:btih:.*?)&tr=', } # 初始化一个字典来存储提取的信息 movie_data = {} # 使用正则表达式提取信息 for key, pattern in patterns.items(): match = re.search(pattern, page_data) if match: movie_data[key] = match.group(1) # 打印提取的电影信息 print("译名:", movie_data.get("译名")) print("片名:", movie_data.get("片名")) print("年代:", movie_data.get("年代")) print("产地:", movie_data.get("产地")) print("类别:", movie_data.get("类别")) print("语言:", movie_data.get("语言")) print("上映日期:", movie_data.get("上映日期")) print("豆瓣评分:", movie_data.get("豆瓣评分")) print("torrent:", movie_data.get("torrent")) print("--------------------------------")

运行函数:

传递参数为页数,但是这个网站第一页和第二页没有统一特征:

https://www.dy2018.com/html/gndy/dyzz/index.html

https://www.dy2018.com/html/gndy/dyzz/index_2.html

这是第一页和第二页的url

可以看出第一页index后面不带“_”第二页带,没办法,获取第二页、第三页信息时只能重新写一个统一的url,将变量index传递进去。

    def run_spider(self, page_index=1):         # 请求地址         url = self.url         # 发送请求         pageHtml = self.get_response(url)         # 解析数据         self.parse_list_data(pageHtml)          if page_index > 1:             for index in range(2, page_index + 1):                 base_index_url = f"https://www.dy2018.com/html/gndy/dyzz/index_{index}.html"                 # 发送请求                 pageHtml = self.get_response(base_index_url)                 # 解析数据                 self.parse_list_data(pageHtml)

运行结果: 

最后打开迅雷,将复制的链接在迅雷中打开,就可以下载电影了

源代码

放出源代码

import requests import re from lxml import etree  class dy2018:     def __init__(self):         """初始化"""         # 请求地址         self.url = "https://www.dy2018.com/html/gndy/dyzz/index.html"         # 请求头         self.header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}         # 代理         self.proxies = {"HTTP": "117.114.149.66:55443"}      def get_response(self, url):         """发送请求并获取响应"""         return requests.get(url=url, headers=self.header).content.decode("GBK")      def print_list_data(self, page_data):         """打印数据"""         # 定义正则表达式模式         patterns = {             "译名": r"◎译\s* \s*名\s+(.*?)
", "片名": r"◎片\s* \s*名\s+(.*?)
", "年代": r"◎年\s* \s*代\s+(.*?)
", "产地": r"◎产\s* \s*地\s+(.*?)
", "类别": r"◎类\s* \s*别\s+(.*?)
", "语言": r"◎语\s* \s*言\s+(.*?)
", "上映日期": r"◎上映日期\s+(.*?)
", "豆瓣评分": r"◎豆瓣评分\s+(.*?)
", "torrent": r'a href="(magnet:\?xt=urn:btih:.*?)&tr=', } # 初始化一个字典来存储提取的信息 movie_data = {} # 使用正则表达式提取信息 for key, pattern in patterns.items(): match = re.search(pattern, page_data) if match: movie_data[key] = match.group(1) # 打印提取的电影信息 print("译名:", movie_data.get("译名")) print("片名:", movie_data.get("片名")) print("年代:", movie_data.get("年代")) print("产地:", movie_data.get("产地")) print("类别:", movie_data.get("类别")) print("语言:", movie_data.get("语言")) print("上映日期:", movie_data.get("上映日期")) print("豆瓣评分:", movie_data.get("豆瓣评分")) print("torrent:", movie_data.get("torrent")) print("--------------------------------") def parse_list_data(self, html): """解析数据""" # 1.创建查找对象 html_node = etree.HTML(html) # 2. 查找父节点div div_node = html_node.xpath('//div[@class="co_content8"]/ul')[0] # 3. 查找table节点 all_table_nodes = div_node.xpath('//table[@class="tbspan"]') # 4. 遍历每一个table节点 for table_node in all_table_nodes: # 地址前缀 base_url = "https://www.dy2018.com" # 取后缀地址 path = table_node.xpath(".//tr[2]//b/a/@href")[0] # 连接地址前缀和后缀 movie_detail_url = base_url + path # 发送详情页请求 movie_detail_html = self.get_response(movie_detail_url) # print(movie_detail_html) self.print_list_data(movie_detail_html) def run_spider(self, page_index=1): # 请求地址 url = self.url # 发送请求 pageHtml = self.get_response(url) # 解析数据 self.parse_list_data(pageHtml) if page_index > 1: for index in range(2, page_index + 1): base_index_url = f"https://www.dy2018.com/html/gndy/dyzz/index_{index}.html" # 发送请求 pageHtml = self.get_response(base_index_url) # 解析数据 self.parse_list_data(pageHtml) if __name__ == '__main__': dy2018().run_spider(page_index=1)

第一次做博客,有不足的地方,还望各位海涵。

相关内容

热门资讯

八分钟了解!newpoker怎... 八分钟了解!newpoker怎么安装脚本,哈糖大菠萝能开挂吗,指南书教程(有挂分析)1、哈糖大菠萝能...
方案辅助!微信小程序微乐破解器... 方案辅助!微信小程序微乐破解器2024!解谜真的是有辅助教程(有挂细节)1、进入到微信小程序微乐破解...
第9分钟了解!德普之星有辅助软... 第9分钟了解!德普之星有辅助软件吗,德州局透视脚本,步骤教程(有挂神器)运德普之星有辅助软件吗辅助工...
窍要辅助!洞庭茶苑app辅助!... 窍要辅助!洞庭茶苑app辅助!关于存在有辅助神器(有挂辅助)1.洞庭茶苑app辅助 选牌创建新账号,...
七分钟了解!wepoker怎么... 七分钟了解!wepoker怎么开辅助,wepoker透视脚本免费app,绝活儿教程(有挂细节)1、w...
窍要辅助!嘟咪互动有挂吗!开挂... 窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有挂总结)窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有...
1分钟了解!wepoker辅助... 1分钟了解!wepoker辅助器最新版本更新内容,德普之星私人局辅助免费,办法教程(有挂辅助)wep...
大纲辅助!心悦海南苹果版辅助器... 大纲辅助!心悦海南苹果版辅助器!关于是有辅助工具(有挂攻略)1、玩家可以在心悦海南苹果版辅助器线上大...
指南辅助!小程序广东雀神智能插... 指南辅助!小程序广东雀神智能插件安装下载!解谜真的是有辅助技巧(新版有挂)运小程序广东雀神智能插件安...
第九分钟了解!wepoker作... 第九分钟了解!wepoker作弊辅助,wpk辅助购买,步骤教程(新版有挂)1、完成wepoker作弊...