Linux执行Python脚本爬取豆瓣top250电影信息及资源分享

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’即可获取资源链接哟~

后记:
如有侵权,笔者秒删!

,博主的微信公众号
程序员小圈圈’开始持续更新了哟~~
识别二维码或者直接搜索名字 ‘程序员小圈圈’ 即可关注本公众号哟~~
不只是有技术哟~~
还有很多的学习娱乐资源免费下载哦~~
还可以学下教育知识以及消遣娱乐哟~~
求关注哟~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值