movie-list-item playable unwatched’下。

    ok,我们按照之前的方式来爬取一下看看。

url='https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action='
res=requests.get(url)
res.encoding= 'utf-8'#该网页是以utf-8的编码形式显示的
soup=BeautifulSoup(res.text, 'html.parser')#使用美丽汤解析网页内容
print(soup)

    检查打印结果,发现get的信息中没有任何关于电影信息的。这是为什么呢?因为这个网页的所有电影信息都是动态加载的。

movie-list-item playable unwatched’的列数增加了。看来,静态网站的那一套在动态加载的网站上行不通了,那么该如何解决呢?

    点击监视器的Network--->XHR。继续朝下滑动滚轮,你会发现Name下的文件增加了!

python爬虫使用api接口爬取电影 python自动爬取更新电影网站_python爬虫使用api接口爬取电影

    点击文件末尾为start=0&limit=20与start=20&limit=20的文件,比较检查,我们发现这正是我们要寻找的信息。

python爬虫使用api接口爬取电影 python自动爬取更新电影网站_json格式_02

    通过比较,我们现在可以大胆猜想start指的是显示起始的电影序号,limit是每次请求显示的电影数目,信息是通过json的格式存储的。我们再点击Headers,发现如下内容:

python爬虫使用api接口爬取电影 python自动爬取更新电影网站_json_03

    ok,现在我们知道怎么获取数据了,经测试,实际上我们可以直接start=0 limit=256,来直接获取全部top10的数据。但我们还是按照网站请求的方式每次20部,来获取。代码如下:

import requests
import json
#爬取豆瓣电影分类排行榜 - 动作片top10%的电影名、评分和豆瓣链接
url='https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start={}&limit=20'
filminfolist=[]#存放结果
for i in range(0,300,20):
    aimurl=url.format(i)
    res=requests.get(aimurl)
    jd=json.loads(res.text)#改成json格式方便读取数据
    for j in jd:
        filminfo={}#以字典存储单条数据
        filminfo['title']=j['title']
        filminfo['score'] = j['score']
        filminfo['url'] = j['url']
        filminfolist.append(filminfo)

打印filminfolist结果如下:

{'title': '这个杀手不太冷', 'score': '9.4', 'url': 'https://movie.douban.com/subject/1295644/'}
{'title': '七武士', 'score': '9.2', 'url': 'https://movie.douban.com/subject/1295399/'}
{'title': '蝙蝠侠:黑暗骑士', 'score': '9.1', 'url': 'https://movie.douban.com/subject/1851857/'}
{'title': '指环王3:王者无敌', 'score': '9.1', 'url': 'https://movie.douban.com/subject/1291552/'}
{'title': '搏击俱乐部', 'score': '9.0', 'url': 'https://movie.douban.com/subject/1292000/'}
{'title': '指环王2:双塔奇兵', 'score': '9.0', 'url': 'https://movie.douban.com/subject/1291572/'}
{'title': '将军号', 'score': '9.0', 'url': 'https://movie.douban.com/subject/1292778/'}

{'title': '指环王1:魔戒再现', 'score': '8.9', 'url': 'https://movie.douban.com/subject/1291571/'}

......

拓展一下:

DataFrame初识

使用Data Frame格式把刚才的数据保存进excel,通过使用套件pandas来实现。

代码如下:

import pandas
df=pandas.DataFrame(filminfolist)
df.to_excel('D:\\douban.xlsx')

总结:动态加载的网页,需要多观察监视器,分析得出真实的抓取页面。美丽汤是分析html格式的,json是分析json格式的,当然也可以使用正则表达式来分析。