第0步:研究网站
先使用chrome打开豆瓣电影网站:https://movie.douban.com,然后找到排行榜里面的科幻电影,发现页面地址为:https://movie.douban.com/typerank?type_name=%E7%A7%91%E5%B9%BB&type=17&interval_id=100:90&action=,很好,后面就会有用了。
右键页面,选择“检查”功能,打开调试工具。在Elements里找到电影封面和电影名称的元素,如图:
image.png
可以观察到,它们都在一个
class
为movie-content
的div里,所以我们只需找出所有class
为movie-content
的div,然后拿出它们的封面和名称即可。
第1步:编写代码
创建一个douban_movie.py
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import os
import time
# 无界面浏览
options = webdriver.ChromeOptions()
# options.add_argument('--headless')
# 打开豆瓣科幻电影排行榜
driver = webdriver.Chrome(options=options)
driver.get("https://movie.douban.com/typerank?type_name=%E7%A7%91%E5%B9%BB&type=17&interval_id=100:90&action=")
# 创建目录,用于保存图片
directory = 'image/豆瓣科幻/'
# 如果目录不存在则创建,此方法常用
if not os.path.exists(directory):
os.makedirs(directory)
time.sleep(3)
headers = {'User-Agent': 'Mozilla/4.0'}
i = 1
for ele in driver.find_elements(By.CSS_SELECTOR, '.movie-list-panel.pictext .movie-content'):
print(ele.get_attribute('innerHTML'))
try:
img = ele.find_element(By.CSS_SELECTOR, 'img')
if img:
img = img.get_attribute('data-original')
name = ele.find_element(By.CSS_SELECTOR, '.movie-name-text a').get_attribute('innerHTML')
print(i, name, img)
filename = '{}{}_{}.jpg'.format(directory, i, name) # 图片命名:{排行}_{电影名}.jpg
html = requests.get(url=img, headers=headers).content
with open(filename, 'wb') as f:
f.write(html)
except BaseException:
print("Error")
i += 1
# 退出浏览器
driver.quit()
执行py文件,发现文件夹里多了如下图片:
image.png
大功告成!
但是还没有结束……