Linux执行Python脚本爬取豆瓣top250电影信息及资源分享
欢迎关注微信公众号: 程序员小圈圈
转载请标明出处^_^
原文首发于: www.zhangruibin.com
本文出自于: RebornChang的博客
前言:
关注‘ 程序员小圈圈 ’
回复‘ top250 ’即可获取电影资源哟~
回复‘ 250xx ’即可获取top250的电影信息及在线观看连接的资料哦~
回复‘ 250jb ’即可获取top250的抓取脚本哟~
豆瓣top250电影是什么
豆瓣top250电影是豆瓣评分最高的250部经典电影,不限时间,不嫌地区,不限语言。
相对来说是大家比较容易接受的电影评分排名。
本文提供什么
1.top250电影的免费资源;
2.top250电影信息抓取脚本;
3.top250电影资源抓取信息的整理,包含排名,评分,主演,简介,观看连接等信息。
下面将针对上面的3条一一说明。
top250电影的免费资源
本资源为之前朋友分享给笔者的,百度云盘资源,里面真真正正的有一堆的电影可以供你离线下载观看。
网盘部分电影资源截图如下:
获取本资源的方式写在前言,此处不再赘述。
top250电影信息抓取脚本
因为一下子看到那么多电影资源,难免有些眼花缭乱,所以就想获取下这250部电影的基本信息,比如说类型,简介之类的,但是一个个上网查是不是很麻烦,所以就寻求脚本帮助,自动抓取需要的信息,然后整理成Excel,整理后部分截图如下
看起来是不是清爽多了?
那么接下来就是脚本信息。
本脚本编写语言为python编写,参考网上一位大佬写的脚本,然后自己做了简单的修改,放在linux服务器上跑了一遍,确认无误,可以抓取成功(脚本执行与2019年8月20日),现将脚本内容粘贴如下,再次感谢那位大佬的分享:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
start_url = 'https://movie.douban.com/top250'
movie_url = []
requests.adapters.DEFAULT_RETRIES = 5
def get_url(url):
global movie_url, start_url
resp = requests.get(url)
soup = BeautifulSoup(resp.text,'lxml')
info_list = soup.find_all(class_='info')
for info in info_list:
movie_url.append(info.find('a').get("href"))
try:
next_link = soup.find(attrs={'rel':'next'}).get("href")
url = start_url+next_link
except:
url = None
print(url)
return url
def get_movie_info(url):
try:
resp = requests.get(url)
except:
time.sleep(5)
resp = requests.get(url)
soup = BeautifulSoup(resp.text,'lxml')
score = soup.find(attrs={'property':"v:average"}).string
rating_people = soup.find(attrs={'property':"v:votes"}).string
No = soup.find(class_='top250-no').string
title = soup.find(attrs={'property':"v:itemreviewed"}).string
movie_info = soup.find(id='info')
info_list = movie_info.text.split('\n')
for info in info_list:
if '导演:' in info:
director = info[4:]
if '编剧:' in info:
screenwriter = info[4:]
if '主演:' in info:
starring = info[4:]
if '类型:' in info:
types = info[4:].replace(' / ','/')
if '制片国家/地区:' in info:
country = info[9:].replace(' / ','/')
if '语言:' in info:
language = info[4:].replace(' / ','/')
if '上映日期:' in info:
date = info[6:].replace(' / ','/')
if '片长:' in info:
length = info[4:]
if '又名:' in info:
nickname = info[4:]
if 'IMDb链接:' in info:
IMDb = info[11:]
time.sleep(1)
try:
nickname = nickname.replace(' / ','/')
except:
nickname = '无'
try:
screenwriter = screenwriter.replace(' / ','/')
except:
screenwriter = '无'
try:
starring = starring.replace(' / ','/')
except:
starring = '无'
try:
IMDb = IMDb.replace(' / ','/')
except:
IMDb = '无'
try:
date = starring.replace(' / ','/')
except:
date = '无'
try:
summary = soup.find(attrs={'class':"all hidden"}).text.strip()
summary = summary.replace('\s','').replace('\n','').replace('\u3000','')
except:
summary = soup.find(attrs={'property':"v:summary"}).text.strip()
summary = summary.replace('\s','').replace('\n','').replace('\u3000','')
movie_info_list = [No, title, score, rating_people, director,
screenwriter, starring, types, country,
language, date, length, nickname, IMDb, summary]
return movie_info_list
def main():
global movie_url
print('开始获取url...')
url = get_url(start_url)
while url:
url = get_url(url)
print('url获取成功!')
with open('/dbTop250_url_2.txt','w',encoding='utf8') as f:
f.write('\n'.join(movie_url))
# with open('/dbTop250_url.txt','r',encoding='utf8') as f:
# movie_url = f.read().split()
with open('/dbTop250_2.txt','w',encoding='utf8') as f:
string = '排名\t电影名称\t评分\t评分人数\t导演\t编剧\
\t主演\t类型\t制片国家/地区\t语言\t演职员\t片长\t又名\
\t剧情简介'
f.write(string)
print('开始获取电影信息:')
for i in range(len(movie_url)):
movie_info_list = get_movie_info(movie_url[i])
with open('/dbTop250_2.txt','a',encoding='utf8') as f:
f.write('\n')
f.write('\t'.join(movie_info_list))
print()
print('获取成功!')
if __name__ == '__main__':
main()
因为是在linux上执行的,所以文件顶部声明了语言编译格式及字符声明,至于怎么在linux上执行py脚本,在上篇文章中也有所说明,这里就不再赘述了。脚本也可以在公众号中获取,回复‘ 250jb’ 即可;
top250电影资源抓取信息的整理
笔者将整理成的Excel上传到了百度云盘,不想自己跑脚本的小伙伴可以关注笔者公众号‘程序员小圈圈’,发送‘250xx’即可获取资源链接哟~
后记:
如有侵权,笔者秒删!
亲,博主的微信公众号
‘程序员小圈圈’开始持续更新了哟~~
识别二维码或者直接搜索名字 ‘程序员小圈圈’ 即可关注本公众号哟~~
不只是有技术哟~~
还有很多的学习娱乐资源免费下载哦~~
还可以学下教育知识以及消遣娱乐哟~~
求关注哟~~ ’