python爬取json接口

本文介绍了一次使用Python进行爬虫编程的初体验,详细展示了如何通过Python爬取JSON接口数据,并将数据保存为Excel文档的过程。代码简洁,易于理解,适合初学者学习。
部署运行你感兴趣的模型镜像

在某大佬的指导下,接触第一个爬虫,这里是爬取了一个网站的接口数据并且保存成Excel文档,代码不多,重在认识爬虫

Python写爬虫真的是爽

#! /usr/bin/env python
# coding=utf-8
import requests
import json
import sys
import xlwt
ses = requests.session() #
# requests是与发送请求有关的,xlwt模块是创建、读写Excel文件,sys实现从程序外部向程序传递参数
reload(sys)#需要重新加载模块,以防止上一次调用过模块导致报错
sys.setdefaultencoding('utf8')
def http_get(url):
    return json.loads(requests.get(url,stream=True).content)

workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('Worksheet')
row=0
for a in range(0,1):   #这句代码是循环 0=<a<1 ,所有实际上就是输出当a=0是写入url,可有可无
              #http://180.153.255.6/mobile/discovery/v2/category/metadata/albums/ts-1515757942203?calcDimension=hot&categoryId=0&device=android&pageId=1&pageSize=100&version=6.3.60
              url="http://180.153.255.6/mobile/discovery/v2/category/metadata/albums/ts-1515757942203?calcDimension=hot&categoryId=0&device=android&pageId="+str(a)+"&pageSize=100&version=6.3.60"
              json_data=http_get(url)
              
              if json_data["list"]==[]:
                   break
              else:
                     b=len(json_data["list"])
                     for bb in range(0,b):
                            special_list=[]
                            tracks_list=[]
                            albumId=json_data["list"][bb]["albumId"]
                            sku_url="http://180.153.255.6/mobile/v1/album/ts-1515829937763?ac=WIFI&albumId="+str(albumId)+"&device=android&isAsc=true&pageId=1&pageSize=1&pre_page=2&source=5&supportWebp=true"
                            json_sku_data=http_get(sku_url)
                            if json_sku_data["data"]!="":
                                   try:
                                           user_id=json_sku_data["data"]["user"]["uid"]
                                   except:
                                           user_id=""
                                   print albumId,
                                   print user_id,
                                   print json_data["list"][bb]["title"]
                                   list = [albumId,json_data["list"][bb]["title"],json_data["list"][bb]["nickname"],json_data["list"][bb]["intro"]]
                            for p in range(0, 4):
                                worksheet.write(row, p, label=list[p])
                            row=row+1
print row-1  #从 0 开始,这里应该直接输出 row 就可以显示多少条数据了
workbook.save('Excel_Workbook.xls')

 需要注意的是,reload(sys) 是重新加载sys模块,如果不加载模块会报错

好了,一个简单的爬虫就做出来了,这个爬虫主要是爬取json接口的数据

 

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何使用 Python 爬取 B 站视频评论并保存为 JSON 格式 要实现爬取 B 站视频评论并将数据保存为 JSON 文件的目标,可以通过以下方法完成: #### 1. 准备工作 在开始之前,需要安装必要的库来处理 HTTP 请求和解析 JSON 数据。常用的库包括 `requests` 和 `json`。 ```bash pip install requests ``` #### 2. 获取 API 接口 B 站的评论通常通过其官方接口提供。对于特定视频 ID (avid),可以访问如下 URL 来获取评论数据: ``` https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn={page}&type=1&oid={video_id}&sort=2 ``` 其中: - `{page}` 是页码参数,用于分页加载更多评论。 - `{video_id}` 是目标视频的 AV 号或者 BV 号对应的 oid 值[^1]。 #### 3. 编写代码逻辑 以下是完整的代码示例,展示如何抓取指定视频的评论数据,并将其存储到本地文件中。 ```python import json import requests def fetch_bilibili_comments(video_id, page_count=10): base_url = "https://api.bilibili.com/x/v2/reply" all_data = {"replies": []} headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Referer": f"https://www.bilibili.com/video/{video_id}" } for pn in range(1, page_count + 1): params = { 'jsonp': 'jsonp', 'pn': str(pn), 'type': '1', # 类型固定为1表示视频 'oid': video_id, 'sort': '2' # 按热度排序 } response = requests.get(base_url, headers=headers, params=params) data = response.json() if not data['data']['replies']: break all_data["replies"].extend(data['data']['replies']) return all_data def save_to_json(filename, data): with open(filename, 'w', encoding='utf-8') as file: json.dump(data, file, ensure_ascii=False, indent=4) if __name__ == "__main__": video_id = input("请输入视频ID(AV号或BV号):").strip() comments_data = fetch_bilibili_comments(video_id) output_filename = f"{video_id}_comments.json" save_to_json(output_filename, comments_data) print(f"评论已成功保存至 {output_filename}") ``` 上述脚本实现了以下功能: - 使用 `fetch_bilibili_comments` 方法动态请求多个页面的数据。 - 将所有回复 (`replies`) 合并成单一列表。 - 调用 `save_to_json` 方法将最终结果导出为 JSON 文件[^2]。 #### 4. 注意事项 - **反爬机制**:频繁调用可能导致 IP 被封禁,建议设置合理的延时时间或代理池。 - **合法性**:确保遵守网站的服务条款以及相关法律法规,在未经授权的情况下不得滥用爬虫技术。 - **错误处理**:增加异常捕获模块以应对网络波动或其他不可预见的情况。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值