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下开发软件。