豆瓣电影TOP250数据分析(一)——数据提取

豆瓣电影TOP250,一直被奉为优质电影排行榜的权威。学了一段时间的python后,打算学以致用,发掘下豆瓣电影TOP250榜单背后的秘密。

巧妇难为无米之炊,没有现成的数据,只好自己动手造轮子了。

打开网页,发现榜单上每部电影只介绍了一部分信息,要爬取详细信息,还是得去每部电影的主页。

点击进入其中一部电影主页(例:肖申克的救赎),用chrome浏览器开发者工具(右键“检查”)看下源代码,还是熟悉的配方:

1、导入要用的第三方模块

import requests

from bs4 import BeautifulSoup

import re

import time

import pandas as pd

from pandas import Series,DataFrame

2、将网址传到requests模块,并进行解析,由于会多次用到,直接封装成函数:

def getsoup(url):

res=requests.get(url)

res.encoding='utf-8'

return BeautifulSoup(res.text,'html.parser')

3、观察源码结构,提取需要的字段信息,如电影名、编剧、主演信息提取:

movie_name=soup.select('#content h1 span')[0].text

info=soup.select('#info')[0].text

director=re.findall('导演:\s(.*?)\s编剧:',info)[0].split('/')

scriptwriter=re.findall('编剧:\s(.*?)\s主演:',info)[0].split('/')

4、print打印出来,发现是我们所需要的信息:

5、接下来开始批量获取电影信息,观察榜单网址(https://movie.douban.com/top250?start=0&filter=)发现,翻页只会改变start后的数字:

u=r'https://movie.douban.com/top250?start={}&filter='

for i in range(0,250,25):

newurl=u.format(i)

for site in getsoup(newurl).select('.pic a'):

url=site['href']

soup=getsoup(url)

6、把提取出来的数据转换成DataFrame格式,方便后续的分析:

movie={'rank':num,'name':movie_name,'director':director,'scriptwriter':scriptwriter, 'actor':actor,'genres':genres,'state':state,'language':language,'release_date':release_date,'duration':duration,'prize':prize,'grade':grade,'pjrs':pjrs,'star':star_level }

df=DataFrame(movie,columns['rank','name','director','scriptwriter','actor','genres','state','language','release_date','duration','prize','grade','pjrs','star'])

7、数据提取就大功告成了:

当然,也可以保存成Excel格式:df.to_excel(r"C:\Users\muma\Desktop\python_work\top250.xlsx")

最后,谈谈数据爬取过程中出现的一些坑:

1、豆瓣的访问频次限制,可以通过设置代理IP或设置访问频次来解决。因为数据量不多,所以我就直接用了time.sleep(0.1)来解决了,大概4分钟就能把数据爬下来;

2、有两部电影主页无法打开,一部电影没有主演、编剧等信息,影响后续转换成DataFrame格式,就直接当做异常数据去掉了,用try-except捕捉IndexError异常解决,最后成功获取247条记录。

预知如何分析去发掘榜单背后的秘密,且听下回分解。

初学python,水平有限,有不足之处,欢迎各位留言斧正。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180730G1YBKL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券