python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:

python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:

 

本次我们选择的爬虫对象是:https://www.dy2018.com/index.html             

具体的三个步骤:1.定位到2020必看片   2.从2020必看片中提取到子页面地址   3.进去子页面,拿到迅雷下载链接

话不多说,上代码:(这个代码还存在问题!!完整解决版本代码在下面)

import requests
import re


#s1,定位到2020必看片
domain="https://www.dy2018.com"
resp=requests.get(domain,verify=False)#去掉安全验证
resp.encoding='gb2312'#一般网站会告诉你他编码格式,也可以写gbk,如果没有这一句则可能出现乱码
page=resp.text#用page表达一下,方便理解

#三次正则表达式都放到一起写了,也可以写到后面
obj1 = re.compile(r"2020必看热片.*?<ul>(?P<ul>.*?)<ul>",re.S)
obj2 = re.compile(r"<a href='(?P<href>.*?)'",re.S)
obj3 = re.compile(r'◎片  名 (?P<moviename>.*?)<br />.*?<td '
                  r'style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<dizhi>.*?)"',re.S)
result1=obj1.finditer(page)
for it in result1:#其实只有一个地方能匹配,所以用search也行,不必循环
    ul=it.group("ul")#缩小区间,就算是定位到必看片系列了
    #print(ul)



# s2,从2020必看片中提取到子页面地址
result2=obj2.finditer(ul)#使用缩小后的区间,正则表达式找到子页面链接
child_href_list=[]#准备一个字典存所有子页面
for itt in result2:#拼接子页面的url地址,域名+子页面地址,有的需要拼接有的不需要
    child_href=domain+itt.group("href")#如果有需要可以用.strip("/")把/去掉
    child_href_list.append(child_href)#把子页面链接放到列表里
#print(child_href_list)#,循环往字典添加子页面网站之后可以打印一下看看网址对不对



#s3,进去子页面,拿到迅雷下载链接
for href in child_href_list:
    child_resp=requests.get(href,verify=False)#循环进入子页面并去掉安全验证
    child_resp.encoding = 'gb2312'  #修改编码格式
    page2=child_resp.text           #用page2表示
    result3=obj3.search(page2)      #也是只有一处能匹配,所以search
    print(result3.group("moviename"))
    print(result3.group("dizhi"))

部分结果代码:

疯狂原始人2
magnet:?xt=urn:btih:53735832ac86bf81d0d6ded5ec8476e3181cb36f&dn=[电影天堂www.dytt89.com]疯狂原始人2-2020_BD国英双语中英双字.mp4&tr=http://t.t789.me:2710/announce&tr=http://t.t789.co:2710/announce&tr=http://t.t789.vip:2710/announce
C:\pythonProject2\venv\lib\site-packages\urllib3\connectionpool.py:1013

拆弹专家2
magnet:?xt=urn:btih:1c5596857e6fa9937ba777485d74c9166c4d334d&dn=[电影天堂www.dytt89.com]拆弹专家2-2020_HD国语中字.mp4&tr=http://t.t789.me:2710/announce&tr=http://t.t789.co:2710/announce&tr=http://t.t789.vip:2710/announce
C:\pythonProject2\venv\lib\site-packages\urllib3\connectionpool.py:1013

 

存在问题:(已解决,往下看)

由于我是小白刚刚上手,所以存在一个问题不知怎么解决:

最后一部电影的正则表达式与前面的不同,不知道这个网页怎么搞的,造成的影响就是原本标记结束的位置无法结束,导致多爬出了一些其他内容。

虽然也包含下载链接,但是不方便阅读,如果有大佬可以帮忙解决一下就好啦!

具体情况:

龙牌之谜</p>
<p>◎年  代 2019</p>
<p>◎产  地 中国大陆/俄罗斯</p>
<p>◎类  别 动作/奇幻/冒险</p>
<p>◎语  言 俄语/英语/汉语普通话</p>
<p>◎字  幕 中文字幕</p>
<p>◎上映日期 2019-08-16(中国大陆)</p>
<p>◎豆瓣评分 3.7/10 from 2659 users</p>
<p>◎IMDb评分 4.8/10 from 133 users</p>
<p>◎文件格式 x264 + ACC</p>
<p>◎视频尺寸 1280 x 720</p>
<p>◎文件大小 1476 MB</p>
<p>◎片  长 120 Mins</p>
<p>◎导  演 伊哥&middot;斯坦普陈科 Oleg Stepchenko</p>
<p>◎主  演 成龙 Jackie Chan</p>
<p>      阿诺&middot;施瓦辛格 Arnold Schwarzenegger</p>
<p>      杰森&middot;弗莱明 Jason Flemyng</p>
<p>      姚星彤 Xingtong Yao</p>
<p>      马丽 Li Ma</p>
<p>      李�� Yu Li</p>
<p>      刘智福 Lance Luu</p>
<p>      刘智堂 Charles Luu</p>
<p>      刘智满 Mark Luu</p>
<p>      李萌萌 Mengmeng Li</p>
<p>      安娜&middot;邱丽娜 Anna Churina</p>
<p>      尤里&middot;科洛科利尼科夫 Yuri Kolokolnikov</p>
<p>      巴维尔&middot;沃利亚 Pavel Volya</p>
<p>      克里斯托弗&middot;法里班克 Christopher Fairbank</p>
<p>      马丁&middot;科勒巴 Martin Klebba</p>
<p>      查尔斯&middot;丹斯 Charles Dance</p>
<p>      鲁特格尔&middot;哈尔 Rutger Hauer</p>
<p>      巴雷特&middot;科茨 Barret Coates</p>
<p>      伊戈尔&middot;日日金 Igor Jijikin</p>
<p>      娜露潘格慕&middot;柴辛 Narupornkamol Chaisang</p>
<p>      安德烈&middot;梅尔兹利金 Andrey Merzlikin</p>
<p>      维伦&middot;巴比切夫 Vilen Babichev</p>
<p>      ��楠塔茬&middot;塔纳潘披散 Sananthachat Thanapatpisal</p>
<p>      Peter Rafelson</p>
<p>      尼基塔&middot;塔拉索夫 Nikita Tarasov</p>
<p>      阿列克谢&middot;彼得鲁欣 Alexey A. Petrukhin</p>
<p>      葵咪莎拉&middot;普碟 Kemisara Paladesh</p>
<p>      安东尼&middot;加瓦德 Anthony Gavard</p>
<p>      马蒂厄&middot;雅克 Mathieu Jaquet</p>
<p>      莱安德罗&middot;梅厄&middot;马丁内斯 Leandro Mayor Martinez</p>
<p>◎简  介</p>
<p>  电影《龙牌之谜》讲述了古老的东方传说&mdash;&mdash;龙王在睡觉的时候睫毛长到地里能够长出茶叶。龙王把法力封印在龙牌里,并把这种力量赋予了替他照料睫毛的白魔法大师(成龙饰)和他的女儿成兰(姚星彤饰)。邪恶的黑魔法师将白魔法大师和成兰关进了异国监狱,龙王也陷入了沉睡,以茶叶为生的广大村民从此生活在水深火热之中&hellip;&hellip;</p>
<p>◎影片截图
magnet:?xt=urn:btih:a07a71aa3ab251c669ec02cd49bffc1edf90d72f&dn=[电影天堂www.dytt89.com]龙牌之谜BD国英双语中英双字.mp4&tr=http://t.t789.me:2710/announce&tr=http://t.t789.co:2710/announce&tr=http://t.t789.vip:2710/announce

解决方案:

修改爬电影名的正则表达式:

obj3 = re.compile(r'<meta name=keywords content="(?P<moviename>.*?)下载">.*?<td '
                  r'style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<dizhi>.*?)"',re.S)

这样能一次性解决html中片名格式不对的情况和最后一部电影爬到其他无用数据的情况。

tips:各位写正则表达式时如果发现爬到的内容不对,可以尝试换一下关键词的位置,用别的地方爬

 

修改后代码:

import requests
import re
import csv

#s1,定位到2020必看片
domain="https://www.dy2018.com"
resp=requests.get(domain,verify=False)#去掉安全验证
resp.encoding='gb2312'#一般网站会告诉你他编码格式,也可以写gbk,如果没有这一句则可能出现乱码
page=resp.text#用page表达一下,方便理解

#三次正则表达式都放到一起写了,也可以写到后面
obj1 = re.compile(r"2020必看热片.*?<ul>(?P<ul>.*?)<ul>",re.S)
obj2 = re.compile(r"<a href='(?P<href>.*?)'",re.S)
obj3 = re.compile(r'<meta name=keywords content="(?P<moviename>.*?)下载">.*?<td '
                  r'style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<dizhi>.*?)"',re.S)
result1=obj1.finditer(page)
for it in result1:#其实只有一个地方能匹配,所以用search也行,不必循环
    ul=it.group("ul")#缩小区间,就算是定位到必看片系列了
    #print(ul)



# s2,从2020必看片中提取到子页面地址
result2=obj2.finditer(ul)#使用缩小后的区间,正则表达式找到子页面链接
child_href_list=[]#准备一个字典存所有子页面
for itt in result2:#拼接子页面的url地址,域名+子页面地址,有的需要拼接有的不需要
    child_href=domain+itt.group("href")#如果有需要可以用.strip("/")把/去掉
    child_href_list.append(child_href)#把子页面链接放到列表里
#print(child_href_list)#,循环往字典添加子页面网站之后可以打印一下看看网址对不对



#s3,进去子页面,拿到迅雷下载链接
f = open("download.csv", mode="w")
csvwritter=csv.writer(f)
for href in child_href_list:
    child_resp=requests.get(href,verify=False)#循环进入子页面并去掉安全验证
    child_resp.encoding = 'gbk'  #修改编码格式
    page2=child_resp.text           #用page2表示
    result3=obj3.search(page2)      #也是只有一处能匹配,所以search
    print(result3.group("moviename"))
    print(result3.group("dizhi"))
    dic=result3.groupdict()
    dic['moviename'] = dic['moviename'].strip()
    dic['dizhi'] = dic['dizhi'].strip()
    csvwritter.writerow(dic.values())
f.close()

保存到csv中用excel打开之后的效果,(千万不要复制,十几个链接同时弹出来)

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: 用Python编写网络电影下载程序的具体步骤可以分为以下几个步骤:1、获取网络电影URL地址;2、使用Pythonurllib库从网络上下载电影;3、使用Python的bs4库解析下载的网页;4、使用Python的requests库下载电影文件;5、使用Python的opencv库进行视频文件处理。 ### 回答2: 编写一个Python爬虫下载网络电影代码需要以下步骤: 1. 导入所需的库:首先,导入需要使用的库,包括`requests`用于发送HTTP请求和获取网页内容,以及`os`用于管理文件和文件夹。 2. 发送HTTP请求并获取网页内容:使用`requests`库发送GET请求并获取目标网页的内容。 3. 解析网页内容:使用合适的解析库,如`BeautifulSoup`或`lxml`,解析网页内容以获取目标电影下载链接。 4. 下载电影:使用`requests`库发送请求并下载电影。您可以使用`get`方法并指定电影下载链接作为参数,然后使用`content`属性获取电影的二进制数据。 5. 保存电影:将下载电影数据保存到指定的文件夹中。您可以使用`os`库来创建目标文件夹并保存电影文件。使用`open`函数将电影数据写入新建的文件中,并使用`wb`选择二进制写入模式。 下面是一个示例代码: ```python import requests import os from bs4 import BeautifulSoup # 发送HTTP请求并获取网页内容 url = "http://example.com" # 替换为目标网页URL response = requests.get(url) content = response.content # 解析网页内容 soup = BeautifulSoup(content, "html.parser") download_link = soup.find("a", {"class": "download-link"})["href"] # 下载电影 movie_response = requests.get(download_link) movie_data = movie_response.content # 保存电影 save_dir = "/path/to/save/folder" # 替换为你要保存电影的文件夹路径 if not os.path.exists(save_dir): os.makedirs(save_dir) save_path = os.path.join(save_dir, "movie.mp4") # 替换为你要保存电影的文件名 with open(save_path, "wb") as file: file.write(movie_data) ``` 上述代码中的URL下载链接、保存目录和文件名都需要根据实际情况进行修改。此外,还可以根据网页结构和需求使用适当的方法和技巧进行调整和优化。 ### 回答3: 编写Python爬虫下载网络电影代码需要以下几个步骤: 1. 导入所需的库和模块: import requests # 用于发送HTTP请求 import re # 用于正则表达式匹配 from urllib.parse import urljoin # 用于拼接URL 2. 发送HTTP请求并获取网页内容: url = "电影网页的URL" response = requests.get(url) # 发送GET请求并获取网页内容 3. 使用正则表达式匹配电影下载链接: pattern = r'"(http[^"]*\.mp4)"' # 定义一个正则表达式匹配电影下载链接 download_links = re.findall(pattern, response.text) # 在网页内容中匹配电影下载链接 4. 将相对链接转化为绝对链接: absolute_download_links = [urljoin(url, link) for link in download_links] # 将相对链接转化为绝对链接 5. 遍历下载链接下载电影: for link in absolute_download_links: file_name = link.split("/")[-1] # 提取电影文件名 with open(file_name, "wb") as file: file.write(requests.get(link).content) # 发送HTTP请求并将下载的内容写入文件 以上是一个基本的爬虫下载网络电影代码框架。需要注意的是,对于某些网站下载电影可能涉及法律问题,请遵守相关法律规定,并确保只下载允许下载电影。另外,还要注意程序的性能和稳定性,如异常处理和下载进度的显示等。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ocean Eyes11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值