一、需求背景 知道一些电影的中文名称,但是想在国外网站上,查一下这些中文电影的评分。因此就必须知道这些中文电影的英文名称是什么,由此诞生次脚本
二、实现思路 通过selenium,自动进入某瓣网站,然后自动输入中文名称,查询获取到电影详情信息中的英文别名。 本脚本中的批量中文电影是通过列表形式传入,还可以进一步优化为通过读取文件输入;另外本脚本最后获取结果是通过控制台打印,同样也可以优化最后写入文件。 三、实现代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :base_python
@File :222222
@Author :lzc
@Date :2023/3/24
@Description :
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys
#检验是否含有中文字符
def is_contains_chinese(strs):
for _char in strs:
if '\u4e00' <= _char <= '\u9fa5':
return True
return False
def get_english_names(names,years,results):
for i,name in enumerate(names):
time.sleep(3)
# 设置 Chrome 驱动路径,注意需要与你的浏览器版本匹配
chromedriver_path = 'D:\Python\install\Scripts\chromedriver'
# 创建 Chrome 驱动实例
driver = webdriver.Chrome(executable_path=chromedriver_path)
# 设置豆瓣电影页面链接
douban_movie_url = 'https://movie.douban.com/chart'
# 打开页面
driver.get(douban_movie_url)
time.sleep(2)
# 获取到输入框,输入电影中文名称和电影年份
driver.find_element(By.ID, 'inp-query').send_keys(name+years[i])
time.sleep(2)
#下发查询
driver.find_element(By.XPATH,"//div[@class='inp-btn']/input").click()
# 等待页面加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, 'root')))
# 获取查询结果中的所有结果集
all_result = driver.find_elements(By.XPATH, "//*/div[@class='item-root']")
# 循环所有电影结果集,通过电影名称和年份确定是否为需要的电影,找到第一个后就停止检索
detail_info = ''
for move in all_result:
try:
info = move.find_element(By.XPATH, "//*/div[@class='title']/a").text
if info.startswith(name) and info.endswith('('+years[i]+')'):
detail_info = move.find_element(By.XPATH, "//*/div[@class='meta abstract']").text
break
except Exception as e:
print(e.args)
pass
continue
if detail_info!='':
# 对电影信息做简单的分割提取,拿到具体英文名称 中国大陆 / 剧情 / Rickshaw Boy / 125分钟
infos = detail_info.split(' / ')
# 判断倒数第二个字符串是否包含中文,如果包含中文,说明不是英文电影名称,则取倒数第三个作为英文电影名称
if is_contains_chinese(str(infos[-2].replace(' ',''))):
results[name] = infos[-3]
else:
results[name] = infos[-2]
else:results[name] = ''
# 关闭浏览器
driver.quit()
print(results)
print(results.values())
return results
if __name__ == '__main__':
names_80 = ['恋恋风尘', '阿郎的故事', '秋天的童话', '缘分', '奇迹', '骆驼祥子', '海滩的一天', '青梅竹马', '黄土地', '孩子王', '学校风云', '人生', '上海滩', '为你钟情','老井', '搭错车', '等待黎明', '何必有我', '鲁冰花', '摇滚青年']
years_80 = ['1986','1989','1987','1984','1989','1982','1983','1985','1984','1987','1988','1984','1983','1985','1986','1983','1984','1985','1989','1988']
names_90 = ['小武','喜剧之王','重庆森林','阳光灿烂的日子','甜蜜蜜','阿飞正传','牯岭街少年杀人案','堕落天使','天若有情','我的父亲母亲','半生缘','偷偷爱你','阮玲玉','风月','星愿','金枝玉叶','星月神话','新不了情','边城','棋王']
years_90 = ['1998','1999','1994','1994','1996','1990','1991','1995','1990','1999','1997','1996','1991','1996','1999','1994','1999','1993','1984','1997']
names_00 = ['孔雀','巴尔扎克与小裁缝','车四十四','红颜','茉莉花开','苏州河','青红','和你在一起','开往春天的地铁','爱情呼叫转移','五月之恋','咖啡时光','早熟','盛夏光年','暖','上车走吧','立春','盲山','一个陌生女人的来信','河上的爱情']
years_00 = ['2005','2002','2001','2005','2004','2000','2005','2002','2002','2007','2004','2003','2005','2006','2003','2000','2007','2007','2004','2008']
names_10 = ['黄金时代','悲伤逆流成河','万物生长','快把我哥带走','无问西东','老炮儿','七月与安生','芳华','少年班','只有芸知道','你好之华','六弄咖啡馆','半个喜剧','老师好','后来的我们','从你的全世界路过','乘风破浪','缝纫机乐队','热带雨','重返20岁']
years_10 = ['2014','2018','2015','2018','2018','2015','2016','2017','2015','2019','2018','2016','2019','2019','2018','2016','2017','2017','2019','2015']
# names = ['缘分']
move_english_results = {}
years_key = ["80", "90", "00", "10"]
names = [names_80, names_90, names_00, names_10]
years = [years_80, years_90, years_00, years_10]
for i, year in enumerate(years_key):
results = {}
english_result = get_english_names(names[i], years[i], results)
move_english_results[year] = english_result.values()
print(move_english_results)
标签:webdriver,中文,python,电影,selenium,某瓣,import
From: https://blog.51cto.com/u_14260790/6150894