爬虫基础-Ajax爬取实战

注:本文章为学习过程中对知识点的记录,供自己复习使用,也给大家做个参考,如有错误,麻烦指出,大家共同探讨,互相进步。
借鉴出处:
该文章的路线和主要内容:崔庆才(第2版)python3网络爬虫开发实战


爬取目标: https://spa1.scrape.center
1、电影的名称、封面、类别、上映日期、评分、剧情简介等信息。
2、用requests实现Ajax数据的爬取
3、对爬取的数据进行存储

分析:
首先:我们要获取电影的名称、封面、类别、上映日期、评分、剧情简介等信息在每一首电影的详情接口可以获取,所以只要搜集所有的电影的详情页即可爬取所有电影的信息。
在这里插入图片描述对详情页接口进行分析,每个url后缀传入了一个数字,分析而知是每部电影的id且所有电影的id都是不同的,那就要找所有的id。
在这里插入图片描述其次:对每一页接口分析而知,响应中包含当前页所有电影的id,那对所有页遍历完之后就可以获取全部的id了。
在这里插入图片描述最后:将每部电影数据存储到json文件中,要将dict转换为json对象后,以追加的方式存入bb.json文件中即可。

输入:

import requests
import json
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s : %(message)s')

BASE_URL = 'https://spa1.scrape.center/api/movie?limit={limit}&offset={offset}'
INDEX_URl = 'https://spa1.scrape.center/api/movie/{id}/'


'''通用爬取方法'''
def scrape_method(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.json()
        else:
            logging.error(f"请求{url}的状态码:{requests.status_codes}")
    except requests.RequestException as e:
        logging.error(e)


'''爬取每一页的url'''
def scrape_baseUrl(limitA,offsetA):
    url = BASE_URL.format(limit=limitA,offset=offsetA)
    return scrape_method(url)


'''爬取每一个电影'''
def scrape_indexRul(id):
    url = INDEX_URl.format(id = id)
    return scrape_method(url)


def main():
    limitNum = 10
    # 一共11页offset依次传入0 10 20 .... 100
    for i in range(0,100,10):
        jsonObject = scrape_baseUrl(limitNum,i)
        logging.info(jsonObject.get('results'))
        # 此时results是dict类型,需要转换为json对象,再存入json文件
        for item in jsonObject.get('results'):
            id = item.get('id')
            indexData = scrape_indexRul(id)
            # 以追加的方式将每一部电影的所有属性都存入到bb.json文件中
            with open('bb.json', 'a', encoding='utf-8') as file:
                file.write(json.dumps(indexData, indent=2, ensure_ascii=False))
                file.write('\n')


if __name__ == '__main__':
    main()

输出:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值