【python爬虫】基于调用接口爬取排行榜单的爬虫方法并将爬取内容保存至csv文件

举报
钧瑜 发表于 2023/10/26 00:14:08 2023/10/26
【摘要】 【python爬虫】基于调用接口爬取排行榜单的爬虫方法并将爬取内容保存至csv文件

大家好,今天来和大家分享下基于调用接口爬取排行榜单的爬虫方法并将爬取内容保存至csv文件


基于调用接口爬取排行榜单的爬虫方法并将爬取内容保存至csv文件

思路:首先先去网页页面,f12,查找到热榜接口。查找到了以后,可以postman验证下。接着就改接口参数,获得热榜前100名的文章、作者、浏览量等数据,然后通过csv库,将爬取的数据,通过csv文件格式存储到本地

步骤1:打开网页,f12,找到接口

 通过分析接口我们发现,只要更改每次发送请求的page、pagesize、channel即可获得想要的页数、每页包含多少条信息、爬取内容种类。

步骤2:通过for循环与字典相结合的方法,完成内容爬取,在通过一个空列表进行追加,即可将所爬内容全部聚集在一起

'''
爬取2页,共100条信息.
这个方法只能说给大家提个思路
学习发散思维,对接口有更好的理解
仅供学习
接口的地址我注释掉了
爬下来的内容,用json格式来提取相关信息
'''
 
messages=[]
 
    for i in range(0,2):
      hot_rank_url='https://***?page='+str(i)+'&pageSize=50&child_channel=python'
      res=requests.get(hot_rank_url,headers=headers)
      for a in range(0,50):
        all_message={'articleTitle':'','nickName':'','viewCount':'','commentCount':'','favorCount':'','hotRankScore':'','articleDetailUrl':''}
        articleTitle_value= res.json()['data'][a]['articleTitle']
        nickName_value = res.json()['data'][a]['nickName']
        viewCount_value = res.json()['data'][a]['viewCount']
        commentCount_value = res.json()['data'][a]['commentCount']
        favorCount_value = res.json()['data'][a]['favorCount']
        hotRankScore_value = res.json()['data'][a]['hotRankScore']
        articleDetailUrl_value = res.json()['data'][a]['articleDetailUrl']
        all_message['articleTitle']=articleTitle_value
        all_message['nickName']=nickName_value
        all_message['viewCount']=viewCount_value
        all_message['commentCount']=commentCount_value
        all_message['favorCount']=favorCount_value
        all_message['hotRankScore']=hotRankScore_value
        all_message['articleDetailUrl']=articleDetailUrl_value
        messages.append(all_message)

步骤3:csv文件保存

'''
只需在for循环的最后,把所需要的内容写进一个列表里面就行了
然后引入csv库,创建一个csv文件
csv按行写入就完事了
'''
 
# 创建csv这个文件
with open(r'C:\Users\***\Desktop\csdn_python_热榜.csv', 'a',newline='')as f:
    #csv文件的使用
    csdn_data = csv.writer(f)
    csv_message=[articleTitle_value,nickName_value,viewCount_value,commentCount_value,favorCount_value,hotRankScore_value,articleDetailUrl_value]
 
 
    csdn_data.writerow(csv_message)        


完整代码:

import requests
from pprint import pprint
import csv
 
 
 
collect_csv_messages=[]
csv_message = []
messages=[]
 
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
 
 
 
# 创建csv这个文件
with open(r'C:\Users\*****\Desktop\csdn_python_热榜.csv', 'a',newline='')as f:
    #csv文件的使用
    csdn_data = csv.writer(f)
    csdn_data.writerow(['文章标题', '作者', '浏览量', '评论数', '收藏数', '热度指数','文章链接'])
 
 
    for i in range(0,2):
      hot_rank_url='https://****?page='+str(i)+'&pageSize=50&child_channel=python'
      res=requests.get(hot_rank_url,headers=headers)
      for a in range(0,50):
        all_message={'articleTitle':'','nickName':'','viewCount':'','commentCount':'','favorCount':'','hotRankScore':'','articleDetailUrl':''}
        articleTitle_value= res.json()['data'][a]['articleTitle']
        nickName_value = res.json()['data'][a]['nickName']
        viewCount_value = res.json()['data'][a]['viewCount']
        commentCount_value = res.json()['data'][a]['commentCount']
        favorCount_value = res.json()['data'][a]['favorCount']
        hotRankScore_value = res.json()['data'][a]['hotRankScore']
        articleDetailUrl_value = res.json()['data'][a]['articleDetailUrl']
        all_message['articleTitle']=articleTitle_value
        all_message['nickName']=nickName_value
        all_message['viewCount']=viewCount_value
        all_message['commentCount']=commentCount_value
        all_message['favorCount']=favorCount_value
        all_message['hotRankScore']=hotRankScore_value
        all_message['articleDetailUrl']=articleDetailUrl_value
        messages.append(all_message)
        csv_message=[articleTitle_value,nickName_value,viewCount_value,commentCount_value,favorCount_value,hotRankScore_value,articleDetailUrl_value]
        #print(csv_message)
 
        #在csv这个文件中一行一行的写入,注意这里写入的是列表
        #csv是以,为区分间隔的,所以我们追加就用列表
        csdn_data.writerow(csv_message)
 
 
#print(messages)
 
 
 


效果图:



2个博客id : 钧瑜 /好学的小师弟

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。