2021-08-08

今天的作业,爬取是一些电影数据。也是遇到了一些问题,搞了一上午,真是把我气坏了)
问题描述:
弄出来的在这里插入图片描述
弄出来的数据总是出来一半之后就开始报错,和我作死。
原因是之前在提取子页面这部分我使用的是result3=obj3.search()
在后期有一个页面自身不包含我匹配的信息,在那就自动报错了。所以后来我改成result3=obj3.finditer(),自动跳过那个页面。就顺利全爬出来
在这里插入图片描述

#1.定位到2021必看热片
#2.从2021必看热片中提取到子页面的链接下载地址
#3.请求子页面的链接地址。拿到我们想要的下载地址

import requests
import re
domain='https://www.dytt89.com/'
resp=requests.get(domain)
resp.encoding='gb2312'#指定字符集
#print(resp.text)


#拿到ul里边的li
obj1=re.compile(r"2021必看热片.*?<ul>(?P<liebiao>.*?)</ul>",re.S)
obj2=re.compile(r"<a href='(?P<href>.*?)'", re.S)
obj3=re.compile(r'◎片  名(?P<movie>.*?)<br />.*?<td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<download>.*?)">',re.S)

#<td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="magnet:?xt=urn:btih:35c6652f69d73ae69d918cc9def27d7e83d239eb&dn=[电影天堂www.dytt89.com]哆啦A梦:伴我同行2-2021_BD国粤日三语中字.mp4&tr=http://t.t789.me:2710/announce&tr=http://t.t789.co:2710/announce&tr=http://t.t789.vip:2710/announce">magnet:?xt=urn:btih:35c6652f69d73ae69d918cc9def27d7e83d239eb&dn=[电影天堂www.dytt89.com]哆啦A梦:伴我同行2-2021_BD国粤日三语中字.mp4</a></td>
result1=obj1.finditer(resp.text)
child_href_list=[]
for it in result1:
    ul=it.group('liebiao')
    #print(ul)

    #提取子页面链接
    result2=obj2.finditer(ul)
    for itt in result2:
        #拼接子页面的url地址:域名+子页面地址
        child_href=domain+itt.group('href').strip("/")
        child_href_list.append(child_href)#把子页面链接保存起来

#提取子页面内容
for href in child_href_list:
    response=requests.get(href)
    response.encoding='gb2312'
    #print(response.text)
    result3=obj3.finditer(response.text)
    for ittt in result3:
        movie=ittt.group("movie")
        print(movie)
        download=ittt.group("download")
        print(download)

现在说一下匹配的几种类型以及不同之处:
1、match

re.match(pattern, string[, flags])

从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。

2、search

re.search(pattern, string[, flags])

若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个。

3、findall

re.findall(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为数组。

4、finditer

re.finditer(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。

若匹配成功,match()/search()返回的是Match对象,finditer()返回的也是Match对象的迭代器,获取匹配结果需要调用Match对象的group()、groups或group(index)方法。
方法search(),它在匹配时会扫描整个字符串,然后返回第一个成功匹配的结果。也就是说,正则表达式可以是字符串的一部分,在匹配时,search()方法会依次扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配内容,如果搜索完了还没有找到,就返回None。
参考文献:
【1】https://blog.csdn.net/weixin_39553705/article/details/110784388
【2】https://blog.csdn.net/chengqiuming/article/details/86361162

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ffmpeg-2021-08-08-git-ac0408522a是一个开源的音视频处理工具,它可以在多个平台上进行编译和安装。该版本是2021年8月8日的最新版本,使用了ac0408522a的Git提交ID。 full_build表示这个版本是一个完整的构建版本,它包含了所有的功能和模块。在编译过程中,会将ffmpeg的所有组件和依赖项都包含进去,以便用户可以使用和访问所有的功能。 通过使用该版本的ffmpeg,用户可以进行各种音视频处理任务,例如转码、剪辑、合并、分割、提取音频等等。它支持多种音视频格式,包括但不限于MP4、AVI、MKV、MP3、AAC等。用户可以根据自己的需求选择不同的输入和输出格式,并且可以自定义各种编解码参数。 此外,ffmpeg还提供了丰富的命令行选项和参数,以便用户可以灵活地控制和配置转码过程。用户可以通过给定不同的命令行选项来指定输入文件、输出文件、编码方式、视频尺寸、比特率、帧率等等,以达到不同的处理目的。 需要注意的是,由于ffmpeg是一个功能强大且复杂的工具,对于初学者来说可能需要一定的学习和实践才能熟练掌握。因此,建议用户在使用之前先阅读官方文档或者参考相关教程,以便更好地了解和使用ffmpeg的功能。 ### 回答2: ffmpeg-2021-08-08-git-ac0408522a-full_build 是一个版本号为 ac0408522a 的 ffmpeg 软件的完整构建版。 FFmpeg 是一个开源的音视频处理工具,能够对音视频进行转码、混流、剪辑等操作。它提供了很多功能丰富的命令行工具,可以满足各种音视频处理需求。 这个版本的 ffmpeg 是在 2021 年 8 月 8 日基于 ac0408522a 提交的代码所编译而成。ac0408522a 是版本的特定标识符,用于追踪、识别和检索代码库中的不同版本。 full_build 表示这个版本是基于完整构建进行的,即所有功能和特性都被包含在内。这意味着在这个版本中,你可以使用 FFmpeg 提供的所有命令和选项,无需额外编译或安装其他附加组件。 对于想要使用 FFmpeg 进行音视频处理的用户来说,这个完整构建版提供了方便和易用性。用户可以通过命令行调用 ffmpeg 工具,并根据自己的需求使用不同的参数和选项,完成各种音视频处理任务,如转码、剪辑、添加字幕、提取音频等等。 由于 FFmpeg 是一个持续更新和发展的开源项目,新的版本可能会修复漏洞、增加新的功能或性能改进。因此,使用最新的版本可以获得更好的用户体验和更高的稳定性。 总之,ffmpeg-2021-08-08-git-ac0408522a-full_build 是基于 ac0408522a 提交的代码所编译而成的一个完整构建版的 FFmpeg 软件,用户可以使用其中的功能丰富的命令行工具来进行音视频处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值