春天来了,万物复苏,很多学生都要做课设项目了,又到了码农们爬虫的季节,空气中弥漫着一阵阵激情的交流声!
一、通用思路
找到豆瓣电影的汇总页面,整个页面都是各种电影的信息(相当于一个列表,把电影摆到一起)每一条点开后有一个详情页。
从汇总页面开始一级一级深入最后获取到每个条目的详情。
二、寻找链接
1.登录豆瓣电影网站,打开开发者工具,观察Network下的XHR异步请求
2.找到第一个API返回的是电影的标签
{“tags”:[“热门”,“最新”,“豆瓣高分”,“冷门佳片”,“华语”,“欧美”,“韩国”,“日本”]}
3.找到第五个API返回的是一些电影的数据
4.先写一个列表把第一个API返回的分类存储,对于每一个分类使用
5.分析字段
https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
通过链接发现,可以获得一些电影基本信息
- rate:评分
- cover_x:电影封面宽度
- title:电影名
- url:电影详情页对应链接
- playable:是否上映
- cover:电影的封面图片
- id:唯一标志
- cover_y:封面高度
- is_new:是否为新上映电影
更多信息还需要点开电影详情页
三、代码实现
#!/usr/bin/env python
# coding:utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import urllib2
import urllib
#json处理字符集
import json
#BeautifulSoup处理页面
from bs4 import BeautifulSoup
#定义tags一个标签数据list
tags=[]
#通过API请求电影标签
url = 'https://movie.douban.com/j/search_tags?type=movie&source=index'
#headers通过get请求发送头文件伪装浏览器
request = urllib2.Request(url=url)
response = urllib.urlopen(request,timeout=20)
request = response.read()
result = json(response.read())
tags = result['tags']
#根据每个标签获取列表
movies = []
for tag in tags:
limit = 0
while 1:
url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=' + tag +'&page_limit=50&page_start=' + str(limit)
print url
request = urllib2.Request(url=url)
response = urllib.urlopen(request,timeout=20)
request = response.read()
result = json(response.read())
result = result['subjects']
#如果此页空了,退出循环
if len(result) == 0
break
#页数自增20
limit +=20
#处理subjects字典中的每一条信息
for item in result:
movies.append(item)
#对第一种电影只要第一个分类
#####
break
#####
break
print len(movies)
#通过下标访问,写入操作
for x in xrange(0,len(movies)):
#item电影中的每一项
item = movies[x]
request = urllib2.Request(url=item['url'])
response = urllib.urlopen(request,timeout=20)
result = response.read()
#用BeautifulSoup解析result
html = BeautifulSoup(result)
title = html.select('h1')[0]
#去除放映时间
title = title.select('span')[0]
#只得到标签中的文本内容
title = title.get_text()
print title
四、总结
本项目通过GET类API接口,根据提供的标签、排序方法、每页数量、每页开始编号等参数返回相应的电影数据,按推荐程度排名,从0号开始,返回热门标签下的20条电影数据。针对每个标签,使用第二个API不断请求数据,如果请求结果中包含数据,则将page_start增加20再继续,知道返回结果为空,说明这一标签下的电影数据已经全部拿到。
BeautifulSoup包提供了解析HTML文本、查找和选择HTML元素、提取元素内容和属性的功能。