从imdb爬取ml-100k的电影封面
ml-100k:数据集,只用到了./ml-100k/u.item
result: 电影封面
电影id.jpg,可以用u.item找到id->电影名称对应关系
所用到的库
import pandas as pd # 读取ml-100k中的文件
from pyquery import PyQuery as pq # 爬虫库
import requests # 爬虫库
import logging # 记录日志
import os # 判断文件是否存在
import multiprocessing # 多进程,加速爬取
import shutil # 最后爬取不到的封面,复制no_found封面
第一步 读取所有电影名称
ml-100k下载,下载不了也没关系,后面GitHub有
def get_movie_names(item_path='./ml-100k/u.item'):
"""获取电影名称./ml-100k/u.item
Args:
item_path: ml-100k电影名称数据集
Return:
movies_data: ml-100k中[(电影id,名称), ()]
"""
movies_data = []
data = pd.read_table(item_path, sep='|', encoding='ISO-8859-1', header=None)
for idx, row in data.iterrows():
movies_data.append((row[0], row[1]))
print(f'get {len(movies_data)} movie name success')
return movies_data
第二步 获取电影对应的封面链接
先定义一个爬虫接口
def scrape_api(url):
"""爬取网页接口"""
logging.info(f'scraping {url}')
try:
response = requests.get(url)
if response.status_code == 200:
return response
logging.error(f'scraping {url} status code error')
except requests.RequestException:
logging.error(f'scraping {url} error')
return None
先用https://www.imdb.com/find?q=搜索电影名称,然后进入详细电影介绍,找到封面url
def get_movie_png(movie_name):
"""获取每部电影的封面图片的url"""
# imdb搜索
search_url = f'https://www.imdb.com/find?q={movie_name}'
response = scrape_api(search_url)
if response is None:
return None
doc = pq(response.text)
href = doc('.findList tr td a').<