引言
在技術社區中,Hacker News 是一個匯聚最新技術文章和討論的熱門平臺。許多開發者和技術愛好者依賴它來獲取行業動態和前沿資訊。然而,手動瀏覽和篩選這些文章可能耗時且低效。本文將介紹一個基于 Python 的 Hacker News 爬蟲工具,它能夠自動化地從 Hacker News 網站抓取最新文章,并將結果保存為 CSV 文件。該工具主要利用了 Python 的 requests
、BeautifulSoup
和 csv
庫,結合了網絡請求和網頁解析技術,為用戶提供了一個高效且便捷的新聞數據抓取解決方案。
總體功能概述
Hacker News 爬蟲工具是一個 Python 腳本,其核心功能是從 Hacker News 網站抓取最新文章,并將文章標題和鏈接保存到 CSV 文件中。它通過調用 requests
庫發送 HTTP 請求獲取網頁內容,利用 BeautifulSoup
庫解析 HTML 數據,并使用 csv
庫將結果保存為 CSV 文件。此外,工具還通過用戶輸入來靈活地指定需要抓取的文章數量。
網絡請求與網頁內容獲取
工具首先需要從 Hacker News 網站獲取網頁內容。以下是網絡請求與網頁內容獲取的代碼片段及解析:
import requests
from bs4 import BeautifulSoup as bsbaseurl = "https://news.ycombinator.com/newest"
response = requests.get(baseurl)
soup = bs(response.content, 'html.parser')
在上述代碼中,requests.get
方法用于發送 HTTP GET 請求到 Hacker News 的最新文章頁面。response.content
包含了網頁的 HTML 內容,隨后通過 BeautifulSoup
對象 soup
來解析這些內容,以便后續提取所需數據。
用戶輸入與參數驗證
為了使工具能夠根據用戶需求抓取指定數量的文章,工具通過命令行輸入來接收用戶指令,并對輸入進行驗證。以下是用戶輸入與參數驗證的代碼片段及解析:
try:number_of_articles = int(input('''Enter the number of articles you want from the hackernews website.
(1-30) : '''))
except ValueError:print("\nYou did not enter a number. Try again.\n")sys.exit(1)if not 1 <= number_of_articles <= 30:print("\nYour input was not in the given range!\n")sys.exit(1)
在上述代碼中,input
函數用于提示用戶輸入所需文章的數量。通過 try-except
塊捕獲可能的 ValueError
異常,確保用戶輸入的是一個有效的整數。隨后,通過條件判斷驗證輸入值是否在允許的范圍內(1 到 30),若不符合則提示用戶并退出程序。
文章數據提取
工具通過解析網頁內容來提取文章的標題和鏈接。以下是文章數據提取的代碼片段及解析:
latest = soup.find_all('a', attrs={'class': 'storylink'})links = []
titles = []for article in latest:links.append(article['href'])titles.append(article.text)
在上述代碼中,soup.find_all
方法用于查找所有具有特定類名(storylink
)的 <a>
標簽,這些標簽包含了文章的鏈接和標題。通過遍歷這些標簽,分別提取 href
屬性(鏈接)和文本內容(標題),并將它們存儲到 links
和 titles
列表中。
數據保存為 CSV 文件
最后,工具將提取到的文章數據保存為 CSV 文件,方便用戶后續查看和使用。以下是數據保存為 CSV 文件的代碼片段及解析:
import csvresult = []for title, link in zip(titles[:number_of_articles], links[:number_of_articles]):d = {}d["News Title"] = titled["Link to the News"] = linkresult.append(d)keys = ["News Title", "Link to the News"]with open("hackernews_latest.csv", "w") as hackernews:writer = csv.DictWriter(hackernews, fieldnames=keys)writer.writeheader()writer.writerows(result)
在上述代碼中,通過 zip
函數將 titles
和 links
列表中的元素配對,并根據用戶指定的文章數量進行切片。隨后,將每篇文章的標題和鏈接封裝為字典,并添加到 result
列表中。通過 csv.DictWriter
創建一個 CSV 寫入器,指定字段名并寫入表頭和數據行。最終,將結果保存到名為 hackernews_latest.csv
的文件中。
總結
本文介紹了一個基于 Python 的 Hacker News 爬蟲工具,它通過結合 requests
庫的網絡請求功能、BeautifulSoup
庫的網頁解析功能和 csv
庫的數據保存功能,實現了從 Hacker News 網站自動化抓取最新文章并保存為 CSV 文件的功能。該工具具有簡單易用、功能實用的特點,適用于需要快速獲取技術新聞數據的各種場景。通過本文的介紹,讀者可以了解到如何利用 Python 相關技術棧實現網頁爬蟲工具的開發,為數據收集和信息整理提供了有益的參考。
源碼獲取
完整代碼已開源,包含詳細的注釋文檔:
🔗 [GitCode倉庫] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [備用下載] https://pan.quark.cn/s/654cf649e5a6 提取碼:f5VG