from lxml import etree
url = 'https://www.ygdy8.net/html/gndy/dyzz/list_23_'
proxy={"http":"49.85.112.173:7890"}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.8031 SLBChan/28"
}
# 定义一个电影字典,把电影信息加到字典中
movie = {}
def get_page(url):
x=int(input('请输入要或许的页面数量'))
x=x+1
print('正在请求')
#循环出链接,依次循环交给get_href
for i in range(0, x):
urls = url + str(i) + '.html'
get_href(urls)
def get_href(url):
#请求网页信息,并进行编码
response = requests.get(url=url, headers=headers)
text = response.content.decode('gbk')
#请求出网页信息中所有的电影链接
html = etree.HTML(text)
hrefs = html.xpath("//div[@class='co_content8']/ul//table//a/@href")
#循环出所有链接的单个链接
for href in hrefs:
href = 'https://www.ygdy8.net' + href
#打印电影链接
print('链接:',href)
#调用pares_url循环传入单个链接
pares_url(href)
def pares_url(url):
#请求电影链接的网页信息并进行编码
response = requests.get(url, headers=headers,proxies=proxy)
text = response.content.decode('gbk')
html = etree.HTML(text)
#选取所有的信息
#所有信息content是全部的信息,以列表的方式返回。
# 所以需要用下面的方法找出需要的信息
title = html.xpath("//font[@color='#07519a']/text()")[0]
content = html.xpath("//div[@id='Zoom']//text()")
'''
循环所有信息里的单个信息
neumerate()设置index下标-------循环字典的一种方式
startswith()------以什么字符串开始
replace()-------替换字符
strip()---------删除两边空格
'''
for index, con in enumerate(content):
if con.startswith('◎译 名'):
译名 = con.replace('◎译 名', '').strip()
movie['译名'] = 译名
if con.startswith('◎片 名'):
片名 = con.replace('◎片 名', '').strip()
movie['片名'] = 片名
if con.startswith('◎年 代'):
年代 = con.replace('◎年 代', '').strip()
movie['年代'] = 年代
if con.startswith('◎产 地'):
产地 = con.replace('◎产 地', '').strip()
movie['产地'] = 产地
if con.startswith('◎类 别'):
类别 = con.replace('◎类 别', '').strip()
movie['类别'] = 类别
if con.startswith('◎语 言'):
语言 = con.replace('◎语 言', '').strip()
movie['语言'] = 语言
if con.startswith('◎字 幕'):
字幕 = con.replace('◎字 幕', '').strip()
movie['字幕'] = 字幕
if con.startswith('◎上映日期'):
上映日期 = con.replace('◎上映日期', '').strip()
movie['上映日期'] = 上映日期
if con.startswith('◎IMDb评分'):
IMDb评分 = con.replace('◎IMDb评分', '').strip()
movie['IMDb评分'] = IMDb评分
if con.startswith('◎豆瓣评分'):
豆瓣评分 = con.replace('◎豆瓣评分', '').strip()
movie['豆瓣评分'] = 豆瓣评分
if con.startswith('◎片 长'):
片长 = con.replace('◎片 长', '').strip()
movie['片长'] = 片长
if con.startswith('◎导 演'):
导演 = con.replace('◎导 演', '').strip()
movie['导演'] = 导演
if con.startswith('◎编 剧'):
编剧 = con.replace('◎编 剧', '').strip()
movie['编剧'] = 编剧
#主演有好几个演员,而单个演员的信息在一个列表中
#所有要拿出全部的演员就要用当前信息的后面的信息
#也就是当前列表后的列表,所以用index下标的方式找出
if con.startswith('◎主 演'):
主演 = con.replace('◎主 演', '').strip()
#创建演员列表,并加入当前演员信息
zhuyans = [主演]
#循环获取下标的信息,
for i in range(index + 1, len(content)):
# 如果信息是以◎开始,那也就是下标信息到下一内容那么就跳出循环
if content[i].startswith('◎标'):
break
#把循环的信息加入列表中
zhuyans.append(content[i].strip())
movie['主演'] = zhuyans
if con.startswith('◎标 签'):
标签 = con.replace('◎标 签', '').strip()
movie['标签'] = 标签
# 和演员列表逻辑一样
if con.startswith('◎简 介'):
简介 = con.replace('◎简 介', '').strip()
jj = []
for i in range(index+1,len(content)):
if content[i].startswith('◎'):
break
if content[i].startswith('磁力'):
break
jj.append(content[i].strip())
movie['简介']=jj
#逻辑和演员列表一样
if con.startswith('◎获奖情况'):
获奖情况 = con.replace('◎获奖情况', '').strip()
hjqk = [获奖情况]
for i in range(index+1,len(content)):
if content[i].startswith("磁力链"):
break
hjqk.append(content[i].strip())
movie['获奖情况'] = hjqk
#循环出movie字典中的键值并打印出来
for mov, value in movie.items():
print(mov, ':', value)
#打印*号区分内容
print('*'*100)
if __name__ == '__main__':
get_page(url)