爬虫自学day4:requests模块之爬取豆瓣电影分类排行榜

豆瓣电影排行榜界面:
在这里插入图片描述
选择喜剧分类:
在这里插入图片描述
我们要爬取的数据是:电影名称、导演、演员、上映时间、国家等这些数据。

如何进行爬取:
这些信息是当前页面的局部信息,那么是否会遇到数据解析。
除了数据解析还可以使用哪种方式实现?

爬取当前页面的URL会得到整张页面。如何只获取我们想要的数据,我们可以看一下会不会和day3所学习的破解百度翻译类似,采用了Ajax请求,请求到json数据。

我们发现在上一个页面中,当我们滑动鼠标滚轮的时候,当鼠标滚轮滑到底部时,滚轮会自动返回到中部左右,故说明滚动到底部时发起了Ajax请求,请求到了另外一批电影数据地址栏URL没变,页面局部刷新

打开抓包工具验证:
检查–>network–>XHR
拖动滚轮走
拖到到底部时捕获到了一盒Ajax请求数据包:
在这里插入图片描述
打开看看:
在这里插入图片描述
在这里插入图片描述
得出:
是一个GET请求,携带的参数为5个如图一所示。
那么意味着对这个url发起一个get请求让他携带这些参数就可以拿到一组json数据?
不一定,我们去content-type看一下:是application/json ,那么肯定是一组json数据了。

打开Response就可以看到我们请求到这一批新的电影数据。

爬取从第一部电影开始的20部电影
代码1:

import json
import requests 
if __name__ == "__main__":
    '''
    第一步:url的指定:
    https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=140&limit=20
    问号后的参数都封装到字典里
    '''
    url = 'https://movie.douban.com/j/chart/top_list'
    param = {
            'type':'24',
            'interval_id':'100:90',
            'action':'',
            'start':'1',#开始的位置,140是从第140步电影取,故可动态修改
            'limit':'20',#限定的个数,20是一次取20个电影
            }
    #进行UA伪装
    headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
            }
    '''
    第二步:请求发送
    '''
    response = requests.get(url=url,params=param,headers=headers)
    '''
    第三步:获取响应数据
    '''
    list_data = response.json()
    '''
    第四步:持久化存储
    '''
    #filename = word+'.json'
    fp = open('./douban.json','w',encoding='utf-8')
    #中文不能使用ASCII码,赋成false
    json.dump(list_data,fp=fp,ensure_ascii=False)
    print('over')

得到的json数据是:
在这里插入图片描述
把他放在json格式化工具中显示一下:

看到爬到的第一部电影《美丽人生》的信息:
在这里插入图片描述
动态修改limit和start参数就可以动态或许任何电影信息:
代码2:
自定义爬取从第二部电影开始的两部电影:

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 13 17:30:50 2020

@author: 1
"""

import json
import requests 
if __name__ == "__main__":
    '''
    第一步:url的指定:
    https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=140&limit=20
    问号后的参数都封装到字典里
    '''
    url = 'https://movie.douban.com/j/chart/top_list'
    start = input('enter start number')
    limit = input('how many films you want to get')
    param = {
            'type':'24',
            'interval_id':'100:90',
            'action':'',
            'start':start,#开始的位置,140是从第140步电影取,故可动态修改
            'limit':limit,#限定的个数,20是一次取20个电影
            }
    #进行UA伪装
    headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
            }
    '''
    第二步:请求发送
    '''
    response = requests.get(url=url,params=param,headers=headers)
    '''
    第三步:获取响应数据
    '''
    list_data = response.json()
    '''
    第四步:持久化存储
    '''
    #filename = word+'.json'
    fp = open('./douban.json','w',encoding='utf-8')
    #中文不能使用ASCII码,赋成false
    json.dump(list_data,fp=fp,ensure_ascii=False)
    print('over')
    

得到的json数据(部分):

[
    {
        "rating":[
            "9.5",
            "50"
        ],
        "rank":3,
        "cover_url":"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206737207.jpg",
        "is_playable":true,
        "id":"1303408",
        "types":[
            "喜剧",
            "动作",
            "爱情"
        ],
        "regions":[
            "美国"
        ],
        "title":"福尔摩斯二世",
        "url":"https://movie.douban.com/subject/1303408/",
        "release_date":"1924-04-21",
        "actor_count":11,
        "vote_count":17002,
        "score":"9.5",
        "actors":[
            "巴斯特·基顿",
            "凯瑟琳·麦奎尔",
            "乔·基顿",
            "Ward Crane",
            "Jane Connelly",
            "George Davis",
            "Doris Deane",
            "Betsy Ann Hisle",
            "丘比·摩根",
            "John Patrick",
            "Ford West"
        ],
        "is_watched":false
    },
    {
        "rating":[
            "9.5",
            "50"
        ],
        "rank":4,
        "cover_url":"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2527089368.jpg",
        "is_playable":false,
        "id":"30203557",
        "types":[
            "喜剧"
        ],
        "regions":[
            "中国香港"
        ],
        "title":"黄子华栋笃笑之金盆𠺘口",
        "url":"https://movie.douban.com/subject/30203557/",
        "release_date":"2018-07-06",
        "actor_count":1,
        "vote_count":2188,
        "score":"9.5",
        "actors":[

总结:
这次和破解百度翻译比较类似,百度翻译是局部信息更新,我们也只需要翻译的那部分信息,需要去找单词的sug里的URL,在POST请求里将word写成一个动态的参数封装到data赋给POST请求即可。这次是一个GET请求,这次是动态修改limit和start。对页面刷新,自动进行Ajax请求的爬取有了更完整的体会和实践。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值