linux运维

python爬虫-12-用python爬取视频网站电影天堂中每一

2022-05-29  本文已影响0人  运维家

上一篇中我们写了一半了,本文在上一篇的基础上继续进行。

1、特殊处理点

需要注意一个问题,之前我们取值的时候,都是一行一行读取的,然后从中获取关键字,那么如果是下面的情况呢?

可以看到一个电影里面往往有很多个演员,这种时候我们如果再根据关键字演员来筛选的话,肯定是不合适的,那么我们采取下面的方式来进行;

if info.startswith('◎演  员'):
    Video_Yanyuan = info.replace('◎演  员', '')
    print('Video_Yanyuan:' + Video_Yanyuan)
    for x in range(index + 1, len(Detail_Content)):
        actor = Detail_Content[x]
        if actor.startswith("◎"):
            break
        print(actor)

上面的意思是说,当我们获取到◎演  员关键字之后,继续往下按行轮训获取值,直到下一个关键字出现为止,这样子就获取到了所有的演员名单。

2、初步代码

当我们所有的问题点解决完之后,我们此时的代码应该如下:

# 导入模块
import requests
from lxml import etree

# 请求头
Headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Referer': 'https://www.ygdy8.net/html/gndy/dyzz/index.html'
}

Base_Url = 'https://www.ygdy8.net'

# 请求第一页
One_Url = 'https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html'
Requ = requests.get(url=One_Url, headers=Headers)
Text = Requ.content.decode('gbk')
# print(Text)

# 获取中间部分视频的url
Html = etree.HTML(Text)
One_Page = Html.xpath("//div[@class='co_content8']//a")
# print(One_Page)

# 获取每个url,并轮训请求
for Details_Url in One_Page:
    Href = Details_Url.xpath("@href")[0]
    # print(Href)
    # 找到以“/”开头的
    if Href.startswith('/'):
        Detail_Url = Base_Url + Href
        One_Detail = requests.get(url=Detail_Url, headers=Headers)
        One_Detail_Html = One_Detail.content.decode('gbk')
        # print(One_Detail.content.decode('gbk'))
        Detail_Html = etree.HTML(One_Detail_Html)
        Detail_Content = Detail_Html.xpath("//div[@id='Zoom']//text()")
        # print(Detail_Content)
        for index, info in enumerate(Detail_Content):
            # 先写三个示例
            if info.startswith('◎译  名'):
                Video_Name_CN = info.replace('◎译  名', '')
                print('Video_Name_CN:' + Video_Name_CN)
            if info.startswith('◎片  名'):
                Video_Name = info.replace('◎片  名', '')
                print('Video_Name:' + Video_Name)
            if info.startswith('◎产  地'):
                Video_Address = info.replace('◎产  地', '')
                print('Video_Address' + Video_Address)
            if info.startswith('◎类  别'):
                Video_Type = info.replace('◎类  别', '')
                print('Video_Type: ' + Video_Type)
            if info.startswith('◎语  言'):
                Video_language = info.replace('◎语  言', '')
                print('Video_Language:' + Video_language)
            if info.startswith('◎上映日期'):
                Video_Date = info.replace('◎上映日期', '')
                print("Video_Date:" + Video_Date)
            if info.startswith('◎豆瓣评分'):
                Video_Number = info.replace('◎豆瓣评分', '')
                print("Video_Number:" + Video_Number)
            if info.startswith('◎片  长'):
                Video_Time = info.replace('◎片  长', '')
                print('Video_Time:' + Video_Time)
            if info.startswith('◎导  演'):
                Video_Daoyan = info.replace('◎导  演', '')
                print('Video_Daoyan:' + Video_Daoyan)
            if info.startswith('◎演  员'):
                Video_Yanyuan = info.replace('◎演  员', '')
                print('Video_Yanyuan:' + Video_Yanyuan)
                for x in range(index + 1, len(Detail_Content)):
                    actor = Detail_Content[x]
                    if actor.startswith("◎"):
                        break
                    print(actor)

    # 只允许请求一次
    break

此时我们的运行结果如下:

Video_Name_CN: 正发生
Video_Name:L'Événement  /  Happening
Video_Address 法国
Video_Type:  剧情
Video_Language: 法语
Video_Date:2021-09-06(威尼斯电影节)  / 2021-11-24(法国)
Video_Number:7.8/10 from 7333 users
Video_Time:100分钟
Video_Daoyan: 奥黛丽·迪万 Audrey Diwan
Video_Yanyuan: 安娜玛丽亚·沃特鲁梅 Anamaria Vartolomei
       卡西·莫泰·克莱恩 Kacey Mottet Klein
       卢安娜·巴杰拉米 Luàna  Bajrami
       露易丝·奥利-狄奎罗 Louise Orry-Diquéro
       路易丝·舍维约特 Louise  Chevillotte
       皮奥·马麦 Pio Marmaï
       桑德里娜·博内尔 Sandrine  Bonnaire
       安娜·穆格拉利斯 Anna Mouglalis
       阿丽斯·德·朗克桑 Alice de  Lencquesaing
       法布里齐奥·隆吉奥内 Fabrizio Rongione
       塞德里克·梅斯伯格 Cédric  Meusburger

3、完善代码

当我们能获取到第一页的第一个视频的相关信息之后,我们是不是进行多次轮训就可以了;

但是还有另外一个问题,一份优雅的代码不应该是一系列代码的堆叠,我们需要进行相关的优化,我们这里就将代码拆分成几个文件吧。

4、完整代码


剩余内容请转至VX公众号 “运维家” ,回复 “174” 查看。

------ “运维家” ,回复 “174”  ------

------ “运维家” ,回复 “174”  ------

------ “运维家” ,回复 “174”  ------

在Linux中的命令,linux实时线程,linux中tail,如何调用linux的epoll,linux无故多出很多进程,linux怎么打开xls文件,linux怎样用命令打开软件,程序员要不要装linux系统,LINUX通用链表实例;

usb无法安装linux,类似安卓linux,在linux中压缩解压命令,512老电脑linux,linux中退出根目录,linux自定义自启的脚本,linux管理员用户名是,新装的linux网卡配置,linux修改u盘权限失败,c语言linux下开发软件。

上一篇 下一篇

猜你喜欢

热点阅读