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

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


这次学习心得,主要分为3讲:

      1.基于正则表达式的爬虫——爬取排行榜榜单内容     【csdn_文章链接】基于正则表达式的爬虫——爬取排行榜榜单内容

      2.基于lxml库的etree方法结合xpath方法——爬取排行榜榜单内容并生成榜单词云图     【文章链接】基于lxml库的etree方法结合xpath方法——爬取排行榜榜单内容并生成榜单词云图

      3.基于调用接口爬取排行榜单的爬虫方法并将爬取内容保存至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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,我们需要在项目的items.py文件定义需要保存的数据字段,例如: ```python import scrapy class KaoyanItem(scrapy.Item): title = scrapy.Field() content = scrapy.Field() datetime = scrapy.Field() ``` 在代码,我们定义了需要保存的三个字段,分别是"title"、"content"和"datetime"。 接下来,在Spider实现xpath翻页爬取和数据保存。具体代码如下: ```python import scrapy from ..items import KaoyanItem class KaoyanSpider(scrapy.Spider): name = 'kaoyan_spider' allowed_domains = ['kaoyan.com'] start_urls = ['https://www.kaoyan.com/news/'] def parse(self, response): # 实现xpath爬取 data = response.xpath("你需要爬取的数据的xpath表达式") # 处理爬取到的数据 for item in data: kaoyan_item = KaoyanItem() kaoyan_item["title"] = item.xpath("标题的xpath表达式").get() kaoyan_item["content"] = item.xpath("内容xpath表达式").get() kaoyan_item["datetime"] = item.xpath("发布时间的xpath表达式").get() yield kaoyan_item # 实现翻页 next_page = response.xpath("下一页的xpath表达式").get() if next_page: next_url = response.urljoin(next_page) yield scrapy.Request(next_url, callback=self.parse) ``` 在代码,我们使用items.py文件定义的KaoyanItem类来保存爬取到的数据,并使用yield语句将数据传给管道进行保存。同时,我们也实现了xpath翻页爬取。 接下来,我们需要配置管道来将数据保存csv文件。在项目的settings.py文件添加以下配置: ```python FEED_FORMAT = "csv" FEED_URI = "data.csv" FEED_EXPORT_FIELDS = ["title", "content", "datetime"] ``` 在配置,我们将数据保存的格式设置为csv,并指定保存路径为"data.csv"。同时,我们还指定了需要保存的字段,即"title"、"content"和"datetime"。 最后,启动爬虫并执行命令`scrapy crawl kaoyan_spider`,即可开始爬取保存数据。 需要注意的是,爬虫需要遵守网站的爬虫规则,不要过度频繁地请求网站。同时,对于数据的处理和保存方式,需要根据具体情况进行选择和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好学的小师弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值