这种动态加载的页面,一般数据会在Network的 JS或者 XHR 类目里。所以我们要使用开发者工具辅助。
URL:https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E9%9D%92%E6%98%A5
一:打开开发者工具,看这一页的 XHR里没有任何文件,然后点击“加载更多”按钮,看它给我们返回什么信息。
返回了一个新的文件,右键这个文件,Open in new tab。
这个页面是一个JSON格式的数据,通过查看,发现这个json数据的内容就是刚加载的电影数据
二:再加载几次,再来看看 XHR 加载的这几个页面的 url:
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E9%9D%92%E6%98%A5&start=20
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E9%9D%92%E6%98%A5&start=40
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E9%9D%92%E6%98%A5&start=60
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E9%9D%92%E6%98%A5&start=80
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E9%9D%92%E6%98%A5&start=100
对比发现只有最后 start= 后面的数字在变化,而且是以20为步长递增的,20正好对应每次加载出来的电影数量。
import requests
import json
import time
for a in range(5):
url = 'https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=青春&start={}'.format(a * 20)
file = requests.get(url).json() # 返回的是 json文件所以用 .json()
time.sleep(2)
#每次加载20个电影信息
for i in range(20):
dict = file['data'][i] # 取出字典中 'data' 下第 [i] 部电影的信息
urlname = dict['url']
title = dict['title']
rate = dict['rate']
cast = dict['casts']
print('影名:{} 评分:{} 演员:{} 链接:{}\n'.format(title, rate, '、'.join(cast), urlname))