使用BeautifulSoup和Pandas進行網頁數據抓取與清洗處理
在數據分析和機器學習的項目中,數據的獲取、清洗和處理是非常關鍵的步驟。今天,我們將通過一個實戰(zhàn)案例,演示如何利用Python中的Beautiful Soup庫進行網頁數據抓取,并使用Pandas庫進行數據清洗和處理。這個案例不僅適合初學者,也能幫助有一定經驗的朋友快速掌握這兩個強大的工具。
一、準備工作
在開始之前,請確保你的Python環(huán)境中已經安裝了requests、beautifulsoup4和pandas庫。你可以通過以下命令安裝它們:
pip install requests beautifulsoup4 pandas
此外,我們需要抓取一個網頁的數據作為示例。為了簡單起見,我們選擇了一個公開的新聞網站頁面。
二、抓取網頁數據
首先,我們需要使用requests庫獲取網頁的HTML內容。然后,使用Beautiful Soup解析HTML,并提取我們感興趣的數據。
import requests from bs4 import BeautifulSoup # 目標網頁URL url = 'https://example.com/news' # 替換為實際的URL # 發(fā)送HTTP請求獲取網頁內容 response = requests.get(url) response.raise_for_status() # 檢查請求是否成功 # 使用Beautiful Soup解析HTML soup = BeautifulSoup(response.text, 'html.parser')
假設我們要提取新聞標題、發(fā)布時間和正文內容。通過檢查網頁的HTML結構,我們發(fā)現這些信息都包含在特定的HTML標簽中。
# 提取新聞標題、發(fā)布時間和正文內容 articles = [] for article in soup.select('.news-article'): # 假設新聞文章都有class="news-article" title = article.select_one('h2.title').text.strip() publish_time = article.select_one('.publish-time').text.strip() content = article.select_one('.content').text.strip() articles.append({ 'title': title, 'publish_time': publish_time, 'content': content })
三、數據清洗
抓取到的數據通常包含一些不需要的信息,比如多余的空格、HTML標簽殘留、特殊字符等。我們需要對這些數據進行清洗。
import pandas as pd # 將數據轉換為DataFrame df = pd.DataFrame(articles) # 打印前幾行數據查看 print(df.head()) # 數據清洗步驟 # 1. 去除字符串前后的空格(已在提取時處理) # 2. 替換特殊字符(例如換行符為空格) df['content'] = df['content'].str.replace('\n', ' ') # 3. 刪除缺失值或無效數據(假設空標題或空內容的數據無效) df = df.dropna(subset=['title', 'content']) # 4. 統(tǒng)一時間格式(假設發(fā)布時間為"YYYY-MM-DD HH:MM:SS"格式) # 這里我們假設發(fā)布時間已經是字符串格式,且格式統(tǒng)一,如果需要轉換格式,可以使用pd.to_datetime() # df['publish_time'] = pd.to_datetime(df['publish_time'], format='%Y-%m-%d %H:%M:%S') # 打印清洗后的數據查看 print(df.head())
四、數據處理
數據清洗后,我們可能還需要進行一些額外的處理,比如數據轉換、數據合并、數據分組等。
# 數據處理步驟 # 1. 提取發(fā)布日期的日期部分(如果需要) # df['publish_date'] = df['publish_time'].dt.date # 2. 統(tǒng)計每個發(fā)布日期的新聞數量(如果需要) # daily_counts = df['publish_date'].value_counts().reset_index() # daily_counts.columns = ['publish_date', 'count'] # print(daily_counts) # 3. 根據關鍵詞過濾新聞(例如只保留包含"疫情"關鍵詞的新聞) keyword = '疫情' filtered_df = df[df['content'].str.contains(keyword, na=False, case=False)] # 打印過濾后的數據查看 print(filtered_df.head())
五、保存數據
處理完數據后,我們可能需要將其保存到文件中,以便后續(xù)使用。Pandas提供了多種保存數據的方法,比如保存為CSV文件、Excel文件等。
# 保存數據為CSV文件 csv_file_path = 'cleaned_news_data.csv' df.to_csv(csv_file_path, index=False, encoding='utf-8-sig') # 保存數據為Excel文件 excel_file_path = 'cleaned_news_data.xlsx' df.to_excel(excel_file_path, index=False, engine='openpyxl')
六、完整代碼示例
為了方便大家理解和運行,以下是完整的代碼示例。請確保將url變量替換為實際的網頁URL,并根據實際的HTML結構調整Beautiful Soup的選擇器。
import requests from bs4 import BeautifulSoup import pandas as pd # 目標網頁URL(請?zhí)鎿Q為實際的URL) url = 'https://example.com/news' # 發(fā)送HTTP請求獲取網頁內容 response = requests.get(url) response.raise_for_status() # 使用Beautiful Soup解析HTML soup = BeautifulSoup(response.text, 'html.parser') # 提取新聞標題、發(fā)布時間和正文內容 articles = [] for article in soup.select('.news-article'): # 假設新聞文章都有class="news-article" title = article.select_one('h2.title').text.strip() publish_time = article.select_one('.publish-time').text.strip() content = article.select_one('.content').text.strip() articles.append({ 'title': title, 'publish_time': publish_time, 'content': content }) # 將數據轉換為DataFrame df = pd.DataFrame(articles) # 數據清洗步驟 df['content'] = df['content'].str.replace('\n', ' ') df = df.dropna(subset=['title', 'content']) # 數據處理步驟(示例:根據關鍵詞過濾新聞) keyword = '疫情' filtered_df = df[df['content'].str.contains(keyword, na=False, case=False)] # 保存數據為CSV文件和Excel文件 csv_file_path = 'cleaned_news_data.csv' excel_file_path = 'cleaned_news_data.xlsx' df.to_csv(csv_file_path, index=False, encoding='utf-8-sig') df.to_excel(excel_file_path, index=False, engine='openpyxl') # 打印過濾后的數據查看 print(filtered_df.head())
七、總結
通過本文,我們學會了如何使用Beautiful Soup進行網頁數據抓取,并使用Pandas進行數據清洗和處理。這兩個庫的結合使用可以大大提高我們處理網頁數據的效率。在實際項目中,你可能需要根據具體的網頁結構和數據需求調整代碼。希望這個實戰(zhàn)案例能幫助你更好地掌握這兩個工具,并在你的數據分析和機器學習項目中發(fā)揮它們的作用。
到此這篇關于使用BeautifulSoup和Pandas進行網頁數據抓取與清洗處理的文章就介紹到這了,更多相關BeautifulSoup Pandas數據抓取與清洗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Windows 8.1 64bit下搭建 Scrapy 0.22 環(huán)境
這篇文章主要介紹了Windows 8.1 64bit下搭建 Scrapy 0.22 環(huán)境,需要的朋友可以參考下2018-11-11深入解析Python中BeautifulSoup4的基礎知識與實戰(zhàn)應用
BeautifulSoup4正是一款功能強大的解析器,能夠輕松解析HTML和XML文檔,本文將介紹BeautifulSoup4的基礎知識,并通過實際代碼示例進行演示,感興趣的可以了解下2024-02-02python中join與os.path.join()函數實例詳解
os.path.join()函數用于路徑拼接文件路徑,下面這篇文章主要給大家介紹了關于python中join與os.path.join()函數的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-03-03Django 忘記管理員或忘記管理員密碼 重設登錄密碼的方法
今天小編就為大家分享一篇Django 忘記管理員或忘記管理員密碼 重設登錄密碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python結合OpenCV和Pyzbar實現實時攝像頭識別二維碼
這篇文章主要為大家詳細介紹了如何使用Python編程語言結合OpenCV和Pyzbar庫來實時攝像頭識別二維碼,文中的示例代碼講解詳細,需要的可以參考下2024-01-01