from bs4 import BeautifulSoup
import pandas as pd

# 目標URL
url = "https://www.bbc.com/news"

# 發送HTTP請求,獲取網頁內容
response = requests.get(url)
response.encoding = 'utf-8' # 設置編碼
html_content = response.text

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'lxml')

# 查找所有新聞標題和鏈接
news_items = soup.find_all('a', class_='gs-c-promo-heading')

# 提取新聞標題和鏈接
news_list = []
for item in news_items:
title = item.get_text(strip=True)
link = "https://www.bbc.com" + item['href']
news_list.append({'title': title, 'link': link})

# 將數據存儲到DataFrame中
df = pd.DataFrame(news_list)

# 保存到CSV文件
df.to_csv('bbc_news.csv', index=False, encoding='utf-8')

print("新聞數據已保存到bbc_news.csv")

3.3 代碼解析

3.4 運行結果

運行上述代碼后,你將在當前目錄下看到一個名為bbc_news.csv的文件,其中包含了BBC新聞網站首頁的新聞標題和鏈接。

4. 爬取動態加載的新聞網站

4.1 目標網站分析

有些新聞網站采用動態加載技術(如AJAX),頁面內容在初始加載時并不包含所有數據,而是通過JavaScript動態加載。對于這類網站,我們需要使用更高級的爬蟲技術,如Seleniumrequests-html

我們以CNN新聞網站(4.2 環境準備

首先,我們需要安裝Selenium庫,并下載對應的瀏覽器驅動(如ChromeDriver)。你可以通過以下命令安裝Selenium

pip install selenium

然后,下載與你的Chrome瀏覽器版本匹配的ChromeDriver,并將其路徑添加到系統環境變量中。

4.3 編寫爬蟲代碼

以下是使用Selenium爬取CNN新聞網站首頁新聞標題和鏈接的代碼示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
import time

# 初始化Chrome瀏覽器驅動
driver = webdriver.Chrome()

# 目標URL
url = "https://edition.cnn.com/"

# 打開目標網頁
driver.get(url)

# 等待頁面加載完成
time.sleep(5)

# 查找所有新聞標題和鏈接
news_items = driver.find_elements(By.CSS_SELECTOR, 'a.container__link')

# 提取新聞標題和鏈接
news_list = []
for item in news_items:
title = item.text
link = item.get_attribute('href')
if title and link: # 過濾空標題和空鏈接
news_list.append({'title': title, 'link': link})

# 將數據存儲到DataFrame中
df = pd.DataFrame(news_list)

# 保存到CSV文件
df.to_csv('cnn_news.csv', index=False, encoding='utf-8')

# 關閉瀏覽器
driver.quit()

print("新聞數據已保存到cnn_news.csv")

4.4 代碼解析

4.5 運行結果

運行上述代碼后,你將在當前目錄下看到一個名為cnn_news.csv的文件,其中包含了CNN新聞網站首頁的新聞標題和鏈接。

5. 處理反爬機制

5.1 設置請求頭

許多新聞網站會通過檢查請求頭來識別爬蟲。為了繞過這一限制,我們可以設置請求頭,模擬瀏覽器行為。以下是一個示例:

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

response = requests.get(url, headers=headers)

5.2 使用代理IP

為了防止IP被封禁,我們可以使用代理IP來發送請求。以下是一個示例:

proxies = {
'http': 'http://your_proxy_ip:port',
'https': 'https://your_proxy_ip:port'
}

response = requests.get(url, proxies=proxies)

5.3 處理驗證碼

有些網站會通過驗證碼來阻止爬蟲。對于這種情況,我們可以使用OCR技術(如pytesseract)來自動識別驗證碼,或者手動輸入驗證碼。

6. 總結

本文詳細介紹了如何爬取全球新聞網站的數據,包括靜態頁面和動態加載頁面的爬取方法,并提供了實操性強的代碼示例。通過本文的學習,你應該能夠掌握基本的新聞網站爬取技術,并能夠處理常見的反爬機制。

當然,爬取新聞網站數據時,務必遵守相關法律法規和網站的使用條款,避免對目標網站造成不必要的負擔。希望本文對你有所幫助,祝你在數據爬取的道路上越走越遠!

上一篇:

Agent Tool 有哪些:深入探討與實踐指南

下一篇:

無關解向量的個數與基礎解系的深度剖析
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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