khjhs60199 commited on
Commit
60fdb0a
·
verified ·
1 Parent(s): 0ced4e8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +117 -37
app.py CHANGED
@@ -187,17 +187,14 @@ class NewsApp:
187
 
188
  try:
189
  self.is_crawling = True
 
190
 
191
- if unlimited:
192
- self.update_progress("🚀 手動爬蟲開始(無限制模式)")
193
- # **關鍵修正:傳遞None表示不限制文章數量**
194
- results = self.crawler.crawl_all_categories(max_articles_per_category=None)
195
- else:
196
- self.update_progress("🚀 手動爬蟲開始(限制模式)")
197
- results = self.crawler.crawl_all_categories(max_articles_per_category=20)
198
 
199
  total_articles = sum(len(articles) for articles in results.values())
200
- mode_text = "無限制" if unlimited else "限制"
201
  result_message = f"✅ 手動爬蟲完成({mode_text}模式),總共處理 {total_articles} 篇文章"
202
 
203
  self.update_progress(result_message)
@@ -274,7 +271,7 @@ class NewsApp:
274
  # 初始化應用
275
  app = NewsApp()
276
 
277
- # API 路由 - 保持不變...
278
  @flask_app.route('/api/news', methods=['GET'])
279
  def api_get_news():
280
  """獲取新聞列表API - 增強版"""
@@ -367,11 +364,11 @@ def create_interface():
367
  ) as interface:
368
 
369
  gr.Markdown("""
370
- # 📈 股市新聞情緒分析器 - 無限制版
371
 
372
  🤖 自動爬取鉅亨網美股和台股新聞,並進行即時中文情緒分析
373
 
374
- **無限制爬取**: 移除文章數量限制,爬取所有可用文章
375
  🎯 **智能分析**: 使用 RoBERTa 模型進行情緒分析
376
  🔍 **多條件篩選**: 支援時間段、關鍵字、情緒篩選
377
  📊 **API接口**: 提供RESTful API獲取分析結果
@@ -416,14 +413,15 @@ def create_interface():
416
  label="😊 情緒篩選"
417
  )
418
 
419
- # 新增:爬蟲模式選擇
420
  crawl_mode = gr.Radio(
421
  choices=[
422
- ("無限制爬取", True),
423
  ("限制爬取 (20篇)", False)
424
  ],
425
  value=True,
426
- label="🚀 爬蟲模式"
 
427
  )
428
 
429
  with gr.Column(scale=2):
@@ -527,7 +525,28 @@ def create_interface():
527
 
528
  ### 🔗 接口列表
529
 
530
- #### 3. 手動觸發爬蟲 (增強版)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
531
  ```
532
  POST /api/crawl
533
  Content-Type: application/json
@@ -545,34 +564,94 @@ def create_interface():
545
  }
546
  ```
547
 
548
- ### 💡 無限制模式特色
549
- - **移除文章數量限制**: 爬取所有可用的新聞文章
550
- - **增加頁面數量**: 從2頁增加到3頁
551
- - **降低延遲時間**: 提升爬取效率
552
- - **詳細進度報告**: 顯示成功/失敗統計
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
553
  """)
554
 
555
  with gr.Tab("ℹ️ 關於"):
556
  gr.Markdown("""
557
  ## 🛠️ 技術特色
558
 
559
- ### ⚡ 無限制爬取
560
- - **移除數量限制**: 不再限制每分類只爬8篇文章
561
- - **增加頁面範圍**: 爬取3頁內容而非2頁
562
  - **智能處理**: 自動處理所有找到的文章URL
563
- - **效率優化**: 縮短延遲時間,提升爬取速度
564
-
565
- ### 📊 爬取統計
566
- - **成功計數**: 顯示成功處理的文章數量
567
- - **錯誤計數**: 追蹤處理失敗的文章
568
- - **進度追蹤**: 實時顯示當前處理進度
569
- - **模式選擇**: 支援無限制和限制兩種模式
570
-
571
- ### 🔧 問題修正
572
- - **文章數量限制**: 從max_articles=8改為無限制
573
- - **URL處理**: 改善重複URL過濾
574
- - **錯誤處理**: 更完善的異常處理機制
575
- - **進度報告**: 更詳細的處理狀態報告
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
576
  """)
577
 
578
  return interface
@@ -591,7 +670,8 @@ if __name__ == "__main__":
591
  print("🚀 啟動股市新聞情緒分析器...")
592
  print("📊 網頁介面: http://localhost:7860")
593
  print("🔌 API接口: http://localhost:5000")
594
- print("💡 新功能: 無限制爬取模式")
 
595
 
596
  # 啟動Gradio介面
597
  interface = create_interface()
 
187
 
188
  try:
189
  self.is_crawling = True
190
+ mode_text = "無限制" if unlimited else "限制"
191
 
192
+ self.update_progress(f"🚀 手動爬蟲開始({mode_text}模式)")
193
+
194
+ # **關鍵修正:使用unlimited參數而非max_articles_per_category**
195
+ results = self.crawler.crawl_all_categories(unlimited=unlimited)
 
 
 
196
 
197
  total_articles = sum(len(articles) for articles in results.values())
 
198
  result_message = f"✅ 手動爬蟲完成({mode_text}模式),總共處理 {total_articles} 篇文章"
199
 
200
  self.update_progress(result_message)
 
271
  # 初始化應用
272
  app = NewsApp()
273
 
274
+ # API 路由
275
  @flask_app.route('/api/news', methods=['GET'])
276
  def api_get_news():
277
  """獲取新聞列表API - 增強版"""
 
364
  ) as interface:
365
 
366
  gr.Markdown("""
367
+ # 📈 股市新聞情緒分析器 - 完全無限制版
368
 
369
  🤖 自動爬取鉅亨網美股和台股新聞,並進行即時中文情緒分析
370
 
371
+ **完全無限制**: 爬取所有可用文章,無數量限制
372
  🎯 **智能分析**: 使用 RoBERTa 模型進行情緒分析
373
  🔍 **多條件篩選**: 支援時間段、關鍵字、情緒篩選
374
  📊 **API接口**: 提供RESTful API獲取分析結果
 
413
  label="😊 情緒篩選"
414
  )
415
 
416
+ # 爬蟲模式選擇
417
  crawl_mode = gr.Radio(
418
  choices=[
419
+ ("無限制爬取 (全部文章)", True),
420
  ("限制爬取 (20篇)", False)
421
  ],
422
  value=True,
423
+ label="🚀 爬蟲模式",
424
+ info="選擇爬取模式"
425
  )
426
 
427
  with gr.Column(scale=2):
 
525
 
526
  ### 🔗 接口列表
527
 
528
+ #### 1. 獲取新聞列表 (增強版)
529
+ ```
530
+ GET /api/news?category={all|us_stock|tw_stock}&days={天數}&keyword={關鍵字}&sentiment={all|positive|negative|neutral}
531
+ ```
532
+
533
+ **參數:**
534
+ - `category`: 新聞分類 (可選,默認: all)
535
+ - `days`: 時間範圍天數 (可選,默認: 7,0表示不限制)
536
+ - `keyword`: 關鍵字搜尋 (可選)
537
+ - `sentiment`: 情緒篩選 (可選,默認: all)
538
+
539
+ **示例:**
540
+ ```
541
+ /api/news?category=us_stock&days=3&keyword=AI&sentiment=positive
542
+ ```
543
+
544
+ #### 2. 獲取統計信息
545
+ ```
546
+ GET /api/stats
547
+ ```
548
+
549
+ #### 3. 手動觸發爬蟲 (完全無限制版)
550
  ```
551
  POST /api/crawl
552
  Content-Type: application/json
 
564
  }
565
  ```
566
 
567
+ #### 4. 獲取系統狀態
568
+ ```
569
+ GET /api/progress
570
+ ```
571
+
572
+ ### 💡 使用示例
573
+
574
+ **Python:**
575
+ ```python
576
+ import requests
577
+
578
+ # 獲取所有正面情緒的美股新聞
579
+ response = requests.get('http://localhost:5000/api/news?category=us_stock&sentiment=positive')
580
+ news_data = response.json()
581
+
582
+ # 搜尋包含"AI"關鍵字的新聞
583
+ response = requests.get('http://localhost:5000/api/news?keyword=AI&days=3')
584
+ ai_news = response.json()
585
+
586
+ # 啟動無限制爬蟲
587
+ response = requests.post('http://localhost:5000/api/crawl',
588
+ json={'unlimited': True})
589
+ result = response.json()
590
+ ```
591
+
592
+ ### 🚀 無限制模式特色
593
+ - **完全無限制**: 爬取所有可用的新聞文章
594
+ - **增加頁面數量**: 從2頁增加到4頁
595
+ - **優化延遲時間**: 提升爬取效率
596
+ - **詳細進度報告**: 顯示處理/成功/跳過/失敗統計
597
  """)
598
 
599
  with gr.Tab("ℹ️ 關於"):
600
  gr.Markdown("""
601
  ## 🛠️ 技術特色
602
 
603
+ ### ⚡ 完全無限制爬取
604
+ - **移除所有限制**: 不再限制每分類文章數量
605
+ - **增加頁面範圍**: 爬取4頁內容獲得更多文章
606
  - **智能處理**: 自動處理所有找到的文章URL
607
+ - **效率優化**: 優化延遲時間,提升爬取速度
608
+
609
+ ### 🔍 多條件篩選系統
610
+ - **時間篩選**: 支援0-30天的時間範圍選擇
611
+ - **關鍵字搜尋**: 支援標題和內容的全文搜尋
612
+ - **情緒篩選**: 可按正面、負面、中性情緒篩選
613
+ - **分類篩選**: 支援美股、台股、全部分類查看
614
+ - **複合查詢**: 支援多條件組合查詢
615
+
616
+ ### 📊 情緒分析引擎
617
+ - **混合模型**: RoBERTa模型 + 關鍵字分析
618
+ - **容錯處理**: 模型失敗時自動使用關鍵字分析
619
+ - **即時分析**: 每篇文章爬取完成立即進行情緒分析
620
+ - **準確性**: 針對中文金融新聞優化
621
+
622
+ ### 🕷️ 爬蟲系統
623
+ - **反爬蟲**: 隨機延遲、User-Agent輪換
624
+ - **智能去重**: 基於標題相似度的重複檢測
625
+ - **即時存檔**: 分析完成後立即保存到資料庫
626
+ - **詳細統計**: 處理、成功、跳過、失敗數量統計
627
+
628
+ ### 🗃️ 資料管理
629
+ - **SQLite資料庫**: 高效的本地資料儲存
630
+ - **索引優化**: 針對查詢條件建立索引
631
+ - **資料清理**: 自動清理過期資料
632
+ - **並發支援**: 支援多線程並發存取
633
+
634
+ ### 📱 介面設計
635
+ - **防閃爍**: 智能更新機制,避免無意義刷新
636
+ - **即時反饋**: 詳細的搜尋結果和進度顯示
637
+ - **響應式設計**: 適配不同螢幕尺寸
638
+ - **用戶友好**: 直觀的操作介面和清楚的狀態提示
639
+
640
+ ### 🔌 API架構
641
+ - **RESTful設計**: 標準的REST API介面
642
+ - **完整文檔**: 詳細的API使用說明
643
+ - **錯誤處理**: 完善的錯誤處理和狀態碼
644
+ - **跨域支援**: 支援CORS跨域請求
645
+
646
+ ---
647
+
648
+ 💡 **使用提示**:
649
+ - 首次啟動會下載情緒分析模型,請耐心等待
650
+ - 無限制模式會爬取更多文章,建議在網路穩定時使用
651
+ - 使用關鍵字搜尋可以快速找到感興趣的新聞
652
+ - API接口可用於整合其他應用系統
653
+
654
+ 📧 **技術支援**: 如有問題請聯繫開發團隊
655
  """)
656
 
657
  return interface
 
670
  print("🚀 啟動股市新聞情緒分析器...")
671
  print("📊 網頁介面: http://localhost:7860")
672
  print("🔌 API接口: http://localhost:5000")
673
+ print("💡 新功能: 完全無限制爬取模式、多條件篩選、關鍵字搜尋")
674
+ print("⚡ 無限制模式: 爬取所有可用文章,無數量限制")
675
 
676
  # 啟動Gradio介面
677
  interface = create_interface()