pip install selenium
pip install webdriver_manager

代碼步驟

1. 初始化瀏覽器

代碼首先使用 seleniumwebdriver.Chrome 創建瀏覽器驅動程序,配置了瀏覽器最大化選項,并加載目標頁面(https://news.sina.com.cn/world/)。這一步為后續抓取頁面內容做準備。

2. 定義數據存儲

代碼定義了一個列表 url 用于存儲新聞鏈接。

3. 等待頁面加載

代碼通過 WebDriverWait 顯式等待新聞項的加載,確保抓取到的內容是完整的。目標新聞項是通過 CSS 選擇器 .news-item 定位的。

4. 遍歷新聞項并提取鏈接

在抓取到的 .news-item 列表中,代碼逐條提取 <a> 標簽的 href 屬性,即新聞鏈接,將其存入 url 列表中。如果某一條鏈接提取失敗,會記錄錯誤信息并繼續處理其他新聞項。

5. 關閉瀏覽器

在抓取完成后,瀏覽器會被關閉以釋放系統資源。

6. 保存鏈接到文件

代碼將抓取到的鏈接存儲到本地文件,文件名為 sina_YYYYMMDD.txt,其中 YYYYMMDD 是當天的日期。保存路徑為 ./inputs,如果路徑不存在,會自動創建。

7. 爬取重試機制

start 函數實現了一個最多嘗試 10 次的重試邏輯。如果爬取失敗,則會重新嘗試,直到成功或嘗試次數達到上限。爬取完成后,代碼會打印成功信息和文件路徑。

8. 程序入口

通過 if __name__ == "__main__": 確保代碼入口,調用 start 函數開始執行爬取操作。

9. 代碼示例

以sina網站爬取全球新聞為例

import re
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import datetime
from urllib import parse
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def get_news():
# 創建 Chrome 瀏覽器驅動,無頭模式
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=chrome_options)

# 加載頁面
driver.get("https://news.sina.com.cn/world/")

# 定義鏈接列表
url = []
urlToday = []

try:
# 等待頁面加載,找到主容器
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".news-item"))
)

# 獲取所有新聞項
news_items = driver.find_elements(By.CSS_SELECTOR, ".news-item")

# 遍歷新聞項,提取鏈接
for item in news_items:
try:
link_element = item.find_element(By.TAG_NAME, "a")
href = link_element.get_attribute("href")
print(f"Found URL: {href}") # 調試用
url.append(href)
except Exception as e:
print(f"Error extracting URL from item: {e}")

except Exception as e:
print(f"An error occurred while fetching news: {e}")

finally:
driver.quit()

# 過濾前一天的新聞
dateYestoday = datetime.date.today() - datetime.timedelta(days=1)

for u in url:
# URL 解碼
urldata = parse.unquote(u)
result = parse.urlparse(urldata)
print(f"URL: {urldata}")
# 提取 URL 中的日期
s = result.path
m = re.search(r"(\d{4})[-/](\d{1,2})[-/](\d{1,2})", s)

if m:
try:
date2 = datetime.date(int(m.group(1)), int(m.group(2)), int(m.group(3)))
if date2 == dateYestoday:
urlToday.append(u)
except Exception as e:
print(f"Error parsing date for URL {u}: {e}")

# 保存結果到文件
dateT = dateYestoday.strftime("%Y%m%d")
file_path = f"./inputs/sina_{dateT}.txt"

os.makedirs("./inputs", exist_ok=True) # 確保目錄存在

try:
with open(file_path, "w", encoding="utf-8") as f:
for var in url:
f.write(var + "\n")
except Exception as e:
print(f"Error writing to file: {e}")

return file_path

# 開始爬取
def start():
sucF = False
count = 0

while count < 10 and not sucF:
try:
file_path = get_news()
sucF = True
except Exception as e:
count += 1
print(f"Attempt {count} failed with error: {e}")

if not sucF:
print("A network outage or other problem has occurred!")
else:
print("新浪新聞爬取完成")
print(f"Saved file: {file_path}")

return file_path

if __name__ == "__main__":
start()

結果展示

使用 Python 和 Mediastack News API 自動收集新聞

Mediastack 是當今企業和開發人員首選的最受歡迎的新聞 API 之一。將此 API 與競爭對手區分開來的最重要功能之一是它支持 Java、Python、Go、JavaScript 和許多其他主要編程語言。它還在其開發人員友好的文檔中提供了多種編程語言的示例集成代碼。在本節中,我們將通過幾個步驟將此 API 集成到 Python 編程語言中。

獲取 API 密鑰

我們需要一個 API 密鑰來將 mediastack API 集成到 Python 中并開始使用它。為此,讓我們注冊它提供的免費計劃并獲取 API 密鑰。

代碼

在此步驟中,我們會將 mediastack API 集成到 Python 中。為此,讓我們打開一個 Python 文件并輸入以下代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Python 3
import http.client, urllib.parse

conn = http.client.HTTPConnection('api.mediastack.com')

params = urllib.parse.urlencode({
'access_key': 'YOUR_ACCESS_KEY',
'categories': '-general,-sports',
'sort': 'published_desc',
'limit': 10,
})

conn.request('GET', '/v1/news?{}'.format(params))

res = conn.getresponse()
data = res.read()

print(data.decode('utf-8'))

測試

為了測試應用程序,讓我們將 API 密鑰放在 ‘YOUR_ACCESS_KEY’ 字段中并運行應用程序。

我們得到的回復如下:

使用 Mediastack 和 Jupyter Notebook 開發基于 Web 的新聞抓取工具

在上一節中,我們可以使用 Python 腳本輕松構建基于 Web 的交互式新聞收集器或抓取器,只需在 Jupyter Notebook 中運行它們即可。

結果如下:

結論

通過本文的詳細講解,相信讀者已經掌握了如何使用Scrapy+Selenium+Mediastack API構建新聞爬蟲系統的核心要點。這套解決方案不僅適用于新聞網站的數據采集,還可以擴展應用到其他網絡爬蟲場景。在實際應用中,建議讀者注意遵守網站的robots協議,合理控制爬取頻率,確保爬蟲程序穩定可靠地運行。隨著技術的不斷發展,我們也將持續優化和更新這套新聞采集方案,為用戶提供更好的數據獲取體驗。

常見問題

News API 提供什么類型的信息?

答:News API通常提供與新聞相關的基本數據,例如新聞標題、新聞文本、新聞來源、發布日期和類似信息。這些數據通常以結構化的方式呈現,用戶可以輕松處理。

mediastack 支持多少個新聞來源?

答:Mediastack 提供對龐大新聞網絡的訪問,支持 7500 多個新聞來源。這些來源包括世界各地的不同出版物、新聞網站、博客和其他新聞提供商。

mediastack API 以什么數據格式提供信息?

答:Mediastack API 通常以 JSON 格式呈現數據,這是一種輕量級且用戶友好的結構。這種格式使數據易于處理、分析并集成到應用程序中。

如何將News API 用于我的業務,哪些使用案例脫穎而出?

答:通過在您的業務中使用News API,您可以進行市場分析、執行競爭對手分析、分析客戶反饋并收集有關危機管理等問題的信息。

如何找到更多同類API?

答:冪簡集成是國內領先的API集成管理平臺,專注于為開發者提供全面、高效、易用的API集成解決方案。冪簡API平臺可以通過以下兩種方式找到所需API:通過關鍵詞搜索API、或者從API Hub分類頁進入尋找。

原文鏈接:https://blog.apilayer.com/how-to-make-news-scraping-automation-with-mediastack-api-and-python/

上一篇:

音頻 API 快速入門指南:在 Linux、Windows、FreeBSD 和 macOS 上播放和錄制聲音

下一篇:

設置OpenAI API Key 密鑰失敗是什么問題?常見原因與解決方案全解析
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費