打开之后,复制到Pycharm,格式化,可以发现是一个字典:
以下只展示3个
{'data': [{'directors': ['弗兰克·德拉邦特'], 'rate': '9.6', 'cover_x': 2000, 'star': '50', 'title': '肖申克的救赎',
'url': 'https://movie.douban.com/subject/1292052/',
'casts': ['蒂姆·罗宾斯', '摩根·弗里曼', '鲍勃·冈顿', '威廉姆·赛德勒', '克兰西·布朗'],
'cover': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg', 'id': '1292052',
'cover_y': 2963},
{'directors': ['吕克·贝松'], 'rate': '9.4', 'cover_x': 658, 'star': '45', 'title': '这个杀手不太冷',
'url': 'https://movie.douban.com/subject/1295644/',
'casts': ['让·雷诺', '娜塔莉·波特曼', '加里·奥德曼', '丹尼·爱罗', '彼得·阿佩尔'],
'cover': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg',
'id': '1295644', 'cover_y': 980},
{'directors': ['罗伯特·泽米吉斯'], 'rate': '9.4', 'cover_x': 721, 'star': '45', 'title': '阿甘正传',
'url': 'https://movie.douban.com/subject/1292720/',
'casts': ['汤姆·汉克斯', '罗宾·怀特', '加里·西尼斯', '麦凯尔泰·威廉逊', '莎莉·菲尔德'],
'cover': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg', 'id': '1292720',
'cover_y': 1035}]
2、‘加载更多’通过json来实现,所以用json来解析;
故,代码如下:
# -*- coding: utf-8 -*
import requests,time
from lxml import etree
for c in range(3): #查看URL发现第一个是0,选3页看看用range(3)
url=r'https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start={}'.format(c*20)
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
page=requests.get(url=url,headers=headers).json()
#print (page) #把打印出的page格式化,可以看出page是一个字典,其键'data'的值page['data']是一个列表
time.sleep(1)
for r in range(20): #每次加载是20条,字典、列表、字符串的索引都是从0开始的,所以用range(20);注意,网站标签,是从1开始的
list=page['data']
#print (list)
dict=list[r] #之后我们发现,列表每个索引的值又是一个字典
#print (dict)
title = dict['title']
rate = dict['rate']
casts=dict['casts'] #字典dict[casts]的值又是一个列表
#print (casts)
url=dict['url']
time.sleep(2)
print ('片名:{}\n评分:{}\n演员:{}\n地址:{}'.format(title,rate,','.join(casts),url))
print ('*'*88)
分析:
','.join(casts) join()方法用于将序列中的元素以指定的字符连接生成一个新的字符串,这里将列表里面的每个值用逗号拼接起来。
结果如下: