注:本文章为学习过程中对知识点的记录,供自己复习使用,也给大家做个参考,如有错误,麻烦指出,大家共同探讨,互相进步。 借鉴出处: 该文章的路线和主要内容:崔庆才(第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()

输出:

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: