爬虫入门—requests模块基础之豆瓣电影信息爬取

爬虫入门—requests模块基础之豆瓣电影信息爬取


Author: Labyrinthine Leo   Init_time: 2021.02.21


Key Words: Spiderrequests库


公众号:Leo的博客城堡

Leo


head.png


1、需求分析

需求:在上一节中,我们已经学会了分析异步加载页面,并通过关键字对百度翻译的结果进行爬取;这一节,我们主要对异步加载页面分析的巩固练习,使用requests库对豆瓣电影信息的爬取。

分析

  1. 如图所示,在搜索软件中输入豆瓣电影排行榜关键字进行搜索,即会出现豆瓣电影的相关排行榜信息。可以在分类排行榜中发现有个类别的排行榜,这里我们以其中的喜剧为例进行数据爬取。

00.png

01.png

  1. 我们点击喜剧类别排行榜,可以发现里面含有排名的电影信息,如下图所示,包含憨豆先生精选辑美丽人生等,而这些信息正是我们需要爬取的。

02.png

  1. 打开F12的开发者选项,就可以发现有XHR的请求信息,然后滚动鼠标滚轮,会发现页面上的影片信息变多,但是地址栏的url并没有改变,就可以知道,该排行榜的影片信息是ajax异步加载的了。

03.png

04.png

04.png

  1. 由上图可以发现,该请求为GET请求,并且其中Parameters(即请求的参数)中包含了5个参数(type是类型,24应该就是喜剧类型;interval_id为固定数据;startlimit应该就是初始页面以及展示的影片数量,这两个参数可以自行该改变),与前一节类似,这些都是拼接在url中的参数,也可以封装为字典作为get()方法中的params参数进行请求。可以看到response中,返回的即当前页面中的影片信息,只是为json数据,这些正是我们需要爬取的。
  2. 基础的流程已经分析清楚,接下来便可动手编码了。
2、编码
# coding  : utf-8
# fun     : 爬取豆瓣电影排行榜信息
# @Author : Labyrinthine Leo
# @Time   : 2021.01.30

import requests
import json

def douban_spider(url=None, num=10):
    """
    爬取豆瓣电影排行榜信息
    :param url: 网址链接
    :param num: 电影数量
    :return:
    """
    # assert url is not None, "url is None!" # False才会触发assert
    if url is None:
        print("url should not be None!")
        return
    # 1.指定url
    url = url
    # 2.UA伪装
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
    }
    # 3.设置请求参数
    params = {
        'type': '24', # 电影类型
        'interval_id': '100:90',
        'action': '',
        'start': '0', # 起始电影iD
        'limit': num # 数量
    }
    # 4.发起请求
    response = requests.get(url=url, params=params, headers=headers)
    # 5.获取响应数据
    list_data = response.json()
    # 6.持久化存储
    fp = open('./douban_movies.json', 'w', encoding='utf-8')
    json.dump(list_data, fp=fp, ensure_ascii=False)
    for data in list_data:
        print("影片:{}, 评分:{}, 年份:{}, 演员:{}".format(data["title"], data["score"], data["release_date"], data["actors"]))
    print("已成功爬取{}部电影信息!".format(num))


if __name__ == '__main__':
    # 喜剧类型电影页面url
    url = "https://movie.douban.com/j/chart/top_list"
    # 输入影片数量
    num = int(input("enter your wanted nums of movies:"))
    douban_spider(url=url, num=num)

运行结果:

05.png


临渊羡鱼不如退而结网
创作不易,如果您觉得这篇文章对你有用,可以点个赞,算是对笔者的支持和激励!这里是Leo的博客城堡,以Python为核,ML&DL为主,泛之形形色色,输寥寥拙见,摄浮光掠影,讲三两故事。临渊羡鱼,不如退而结网,持续干货输出,有趣的灵魂值得你的关注!
原文可以去笔者的github主页:https://github.com/LabyrinthineLeo/Yxs_Git_Learning_repos查看(如果可以,点个star也无妨呀,嘿嘿)。


Leo的博客城堡


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值