Python爬蟲實戰系列3:今日BBNews程式設計新聞採集

Python魔法师發表於2024-03-15

一、分析頁面

開啟今日BBNews網址 https://news.bicido.com ,下拉選擇【程式設計】欄目

首頁.png

1.1、分析請求

F12開啟開發者模式,然後點選Network後點選任意一個請求,Ctrl+F開啟搜尋,輸入標題Apache Doris 2.1.0 版本釋出 ,開始搜尋

分析請求.png

搜尋結果顯示直接返回的json格式,那就so easy了,直接copy curl,然後將curl 轉換為Python程式碼,執行。

推薦個curl轉Python程式碼的線上工具:https://curlconverter.com/

curl_to_python.png

二、程式碼實現

直接將curl 轉換後的Python程式碼做下修改,然後除錯執行即可。

完整程式碼

# -*- coding: utf-8 -*-
import os
import sys
from datetime import datetime

import requests

opd = os.path.dirname
curr_path = opd(os.path.realpath(__file__))
proj_path = opd(opd(opd(curr_path)))
sys.path.insert(0, proj_path)

from app.conf.conf_base import USERAGENT

spider_config = {
    "name_en": "https://news.bicido.com",
    "name_cn": "今日BBNews"
}


class Bbnews:
    def __init__(self):
        self.headers = {
            'referer': 'https://news.bicido.com/',
            'user-agent': USERAGENT
        }

    def get_group(self):
        url = 'https://news.bicido.com/api/config/news_group/'
        content = requests.get(url=url, headers=self.headers)
        content = content.json()
        return content

    def get_news(self):
        groups = self.get_group()
        news_type = []
        for group in groups:
            if group['name'] == '程式設計':
                news_type = group['news_types']
        result = []
        for news_type in news_type:
            type_id = news_type['id']
            url = f'https://news.bicido.com/api/news/?type_id={type_id}'
            content = requests.get(url, headers=self.headers)
            news_list = content.json()
            for new in news_list:
                result.append({
                    "news_title": str(new['title']),
                    "news_date": datetime.now(),
                    "source_en": spider_config['name_en'],
                    "source_cn": spider_config['name_cn'],
                })
        return result


def main():
    bbnews = Bbnews()
    results = bbnews.get_news()
    print(results)


if __name__ == '__main__':
    main()

總結

  1. 今日BBNews頁面沒反爬策略,比較簡單,拿來即用
  2. 本文介紹了curl to Python的工具,方便好用。

本文章程式碼只做學習交流使用,作者不負責任何由此引起的法律責任。

各位看官,如對你有幫助歡迎點贊,收藏,轉發,關注公眾號【Python魔法師】獲取更多Python魔法~

qrcode.jpg

相關文章