pip install selenium
pip install webdriver_manager

代碼步驟

1. 初始化瀏覽器

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

2. 定義數(shù)據(jù)存儲

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

3. 等待頁面加載

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

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

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

5. 關(guān)閉瀏覽器

在抓取完成后,瀏覽器會被關(guān)閉以釋放系統(tǒng)資源。

6. 保存鏈接到文件

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

7. 爬取重試機制

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

8. 程序入口

通過 if __name__ == "__main__": 確保代碼入口,調(diào)用 start 函數(shù)開始執(zhí)行爬取操作。

9. 代碼示例

以sina網(wǎng)站爬取全球新聞為例

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():
# 創(chuàng)建 Chrome 瀏覽器驅(qū)動,無頭模式
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}") # 調(diào)試用
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}")

# 保存結(jié)果到文件
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()

結(jié)果展示

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

Mediastack 是當今企業(yè)和開發(fā)人員首選的最受歡迎的新聞 API 之一。將此 API 與競爭對手區(qū)分開來的最重要功能之一是它支持 Java、Python、Go、JavaScript 和許多其他主要編程語言。它還在其開發(fā)人員友好的文檔中提供了多種編程語言的示例集成代碼。在本節(jié)中,我們將通過幾個步驟將此 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 開發(fā)基于 Web 的新聞抓取工具

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

結(jié)果如下:

結(jié)論

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

常見問題

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

答:News API通常提供與新聞相關(guān)的基本數(shù)據(jù),例如新聞標題、新聞文本、新聞來源、發(fā)布日期和類似信息。這些數(shù)據(jù)通常以結(jié)構(gòu)化的方式呈現(xiàn),用戶可以輕松處理。

mediastack 支持多少個新聞來源?

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

mediastack API 以什么數(shù)據(jù)格式提供信息?

答:Mediastack API 通常以 JSON 格式呈現(xiàn)數(shù)據(jù),這是一種輕量級且用戶友好的結(jié)構(gòu)。這種格式使數(shù)據(jù)易于處理、分析并集成到應用程序中。

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

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

如何找到更多同類API?

答:冪簡集成是國內(nèi)領(lǐng)先的API集成管理平臺,專注于為開發(fā)者提供全面、高效、易用的API集成解決方案。冪簡API平臺可以通過以下兩種方式找到所需API:通過關(guān)鍵詞搜索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并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

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

#AI深度推理大模型API

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

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