Python练习三:爬取豆瓣电影分类排行榜 - 动作片top10%

    目标网址url:

    https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action=

    使用谷歌浏览器的检查功能对网站进行分析,发现需要爬取的内容在class‘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的信息中没有任何关于电影信息的。这是为什么呢?因为这个网页的所有电影信息都是动态加载的。

    转动鼠标滚轮,使页面朝下拉,你会发现,有更多的内容被加载进来了,查看监视器,你会发现class‘movie-list-item playable unwatched’的列数增加了。看来,静态网站的那一套在动态加载的网站上行不通了,那么该如何解决呢?

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


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


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


    发现,获得的内容是通过GET url:‘https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20’来获取的。

    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/'}

......

拓展一下:

使用Data Frame格式把刚才的数据保存进excel。

使用套间pandas。

代码如下:

猜你喜欢

转载自blog.csdn.net/weixin_41710905/article/details/80515046