python zhihu 热榜查询

from bs4 import BeautifulSoup
import requests
import json
import time
import logging

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(name)s %(levelname)s %(message)s",
    datefmt="%Y-%m-%d  %H:%M:%S %a",
)
log = logging.getLogger(__name__)

class AccounZhihu:
    def __init__(self):
        pass
    def zhihu(self):
        try:
            url = f"https://www.zhihu.com/billboard"

            # 直接使用requests进行请求
            headers = {
                'Accept-Language': 'zh-CN,zh;q=0.9',
                'sec-ch-ua-platform': "Windows",
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
                'Sec-Fetch-Site': 'same-origin',
                'Sec-Fetch-Mode': 'cors',
                'Sec-Fetch-Dest': 'empty',
                'User-Agent': 'Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
            }

            # 直接执行请求
            response = requests.get(url, headers=headers, timeout=30)

            if response.status_code != 200:
                return {'error': f"error {response.text}", 'status': 1001}

            try:
            
                soup = BeautifulSoup(response.text, "html.parser") 
                card_list_items = soup.find('script',  {'id': 'js-initialData'})
                
                try:
                    json_html = card_list_items.text
                    parsed_data = json.loads(json_html)
                except Exception as e:
                    return {'error':"解码失败,请检查编码是否正确",'status':1000}

                result_dict = []
                hot_list = parsed_data.get("initialState", {}).get("topstory", {}).get("hotList", [])
                if hot_list:
                    for index, item in enumerate(hot_list):
                        result_dict.append({
                            "index": index,
                            "answerCount": item["feedSpecific"]["answerCount"],
                            "titleText": item["target"]["titleArea"]["text"],
                            "excerptText": item["target"]["excerptArea"]["text"],
                            "imageURL": item["target"]["imageArea"]["url"],
                            "metricsText": item["target"]["metricsArea"]["text"],
                            "linkURL": item["target"]["link"]["url"]
                        })
                    status = 200
                else:
                    status = 404
                    result_dict = []

                return {'data': result_dict, 'status': status}

            except Exception as e:
                errors = f"JSON解析失败:{str(e)}"
                return {'error': errors, 'status': 1000}

        except Exception as e:
            errors = f"请求发生错误:{str(e)}"
            return {'error': errors, 'status': 1002}

if __name__ == "__main__":
    workings = AccounZhihu()
    result = workings.zhihu()
    print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魔兽-SS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值