线程池获取极目新闻信息,并存入CSV文件

线程池获取极目新闻信息,并存入CSV文件

仅供自己练习和学习使用。

请求地址

aHR0cHM6Ly95dGguY3Rkc2IubmV0L2FtYy9jbGllbnQvbGlzdENvbnRlbnRCeUNvbHVtbg==

分析

1、请求头中需要携带Token值和requestTime值,Token为MD5加密串,requestTime为当前时间戳

代码

import requests
import time
import hashlib
from concurrent.futures import ThreadPoolExecutor
import csv


class JiMuNews:

    def __init__(self):
        self.url = 'aHR0cHM6Ly95dGguY3Rkc2IubmV0L2FtYy9jbGllbnQvbGlzdENvbnRlbnRCeUNvbHVtbg=='
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
        }

    @staticmethod
    def get_token(date_time):
        salt = "hbrb-app-amc"
        h5_str = "h5Client-id"
        data_str = salt + '$' + date_time
        md5 = hashlib.md5()
        md5.update(data_str.encode('utf-8'))
        md5_str = md5.hexdigest()
        new_str = h5_str + "$" + md5_str + "$" + date_time
        new_md5 = hashlib.md5()
        new_md5.update(new_str.encode('utf-8'))
        new_md5_str = new_md5.hexdigest()
        return new_md5_str

    def get_news_data(self, page):
        date_time = str(int(time.time() * 1000))
        self.headers['Token'] = self.get_token(date_time)
        self.headers['requestTime'] = date_time

        form_data = {
            'focusNo': 5,
            'publishFlag': 1,
            'pageNo': page,
            'pageSize': 20,
            'column': 1476
        }

        response = requests.post(url=self.url, headers=self.headers, data=form_data).json()
        return  response['data']['contentList']

    def save_data(self, news_list):
        for news in news_list:
            with open('jm_news_info.csv', 'a', encoding='utf-8', newline='') as f:
                csv_obj = csv.DictWriter(f, ['title', 'summary', 'publishTime'])
                if f.tell() == 0:
                    csv_obj.writeheader()
                news_dict = {
                    'title': news['title'],
                    'summary': news['summary'],
                    'publishTime': news['publishTime'],
                }
                print('保存数据:',news_dict)
                csv_obj.writerow(news_dict)

    def main(self):
        pool = ThreadPoolExecutor(max_workers=5)
        for page in range(1, 5):
            response = pool.submit(self.get_news_data, page)
            self.save_data(response.result())


if __name__ == '__main__':
    jm = JiMuNews()
    jm.main()
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值