豆瓣电影排行 TOP 250

阅读文本大概需要 6 分钟。

对于一个 Python 初学者来说,最有吸引力的莫过于 Python 爬虫了,今天我们就用 Python 来写一个爬虫,爬取豆瓣电影排行 TOP 250 的电影。

先来看一下我爬到的数据:

一共 250 条,包括电影的排名、链接、图片链接、类型、评分、介绍等等。

话不多少, 下面就来实现这个功能。

首先引包:

importrequests

importre

importjson

requests 发送请求,re 正则来提取数据,json 模块将拿到的数据转成 JSON。

首先分析路由:

在切换页面的时候路由中只有 start 参数在变化,并且每次增加 25 。

然后我们根据这个规律来写爬虫。

我们先将爬虫的各个部分写好, 然后在主函数中调用爬虫的各个部分来完成。

首先我们定义一个方法获取页面:

defget_one_page(url):

headers = {

'User-Agent':'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Mobile Safari/537.36',

}

res = requests.get(url, headers=headers, verify=False)

ifres.status_code ==200:

returnres.text

else:

returnNone

这个方法传入一个 url 并根据这个 url 获取这个页面的 html 字符串,如果成功的返回 这个字符串。

接下来定义处理这个字符串的方法:

defdeal_page_data(html):

# (.*?) 匹配slogn,因部分影片没有slogn,因此更新

movie_re = re.compile(r'

.*?(.*?).*?.*?.*?

.*?([0-9]).*?;.*?;(.*?)&.*?;.*?;(.*?)\n.*?(.*?).*?

(.*?)

',re.S)

movieData = re.findall(movie_re, html )

foriteminmovieData:

ifitem[8].strip() =='':

slogn =''

else:

tmp = re.findall(r'(.*?)', item[8])

slogn = tmp[]

yield{

'index':item[],

'addr':item[1],

'title':item[2],

'image':item[3],

'time':item[4],

'area':item[5],

'class':item[6],

'score':item[7],

'slogn': slogn

}

这个方法通过正则提取数据,需要注意的一点是,有的电影是没有简介的,如果忽略这一点,而且正则不能识别的话,很可能会少爬几个电影,或者部分电影数据是错误的。

上面代码的注释中是我一开始匹配简介的方法,没有考虑到没有简介的情况,会丢失几条数据,因此更新了一下。正则中一共九个括号,每个电影获取九条数据,分别是排名、链接、名字、图片链接、上映时间、地区、类型、评分和简介。如果没有简介的 slogn 为空。

接下来就该讲数据写入文件了:

defwrite_to_file(moviedata):

withopen('doubanMovieTop250.json','a',encoding='utf-8')asf:

print('正在写入: 第 '+moviedata['index'] +' 条')

f.write(json.dumps(moviedata, ensure_ascii=False)+'\n')

这个方法是将一个电影的数据写入文件,并且换行。

接下来定义主方法调用以上这些方法实现爬虫:

defmain():

foriinrange(10):

start = str(i *25)

print('-'*30)

print('正在爬取: 第 '+ str(i+1) +' 页')

url = R'https://movie.douban.com/top250?start={}'.format(start)

html = get_one_page(url)

foritemindeal_page_data(html):

write_to_file(item)

这里通过循环实现切换页面,用循环将每一条数据写入文件,并且打印一些提示 信息。

最后启动主函数:

main()

我们的爬虫就开始运行了。

一共两百五十条数据:

大功告成。

运行的时候可能有些同学会报一个警告,可以引入一个包来暂时屏蔽这个警告:

importwarnings

warnings.filterwarnings("ignore")

到这里爬取豆瓣电影 TOP250 就完成啦。

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

扫码关注云+社区

领取腾讯云代金券