亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 后端開發(fā) Python教程 網(wǎng)絡(luò)抓取和分析外語數(shù)據(jù)

網(wǎng)絡(luò)抓取和分析外語數(shù)據(jù)

Dec 24, 2024 am 11:40 AM

最近我決定做一個快速的網(wǎng)頁抓取和數(shù)據(jù)分析項目。因為我的大腦喜歡想出需要花費大量時間的大想法,所以我決定挑戰(zhàn)自己,想出一些可以在幾個小時內(nèi)完成的簡單事情。

這是我想到的:

由于我的本科學位最初是外語(法語和西班牙語),我認為網(wǎng)絡(luò)抓取一些語言相關(guān)數(shù)據(jù)會很有趣。我想使用 BeautifulSoup 庫,它可以解析靜態(tài) html,但無法處理需要 onclick 事件來顯示整個數(shù)據(jù)集的動態(tài)網(wǎng)頁(即,如果頁面已分頁,則單擊下一頁數(shù)據(jù))。

我決定使用最常用語言的維基百科頁面。

Web scraping and analysing foreign languages data

我想做以下事情:

  • 獲取頁面的 html 并輸出到 .txt 文件
  • 使用beautiful soup解析html文件并提取表數(shù)據(jù)
  • 將表格寫入 .csv 文件
  • 使用數(shù)據(jù)分析提出我想回答此數(shù)據(jù)集的 10 個問題
  • 使用 pandas 和 Jupyter Notebook 回答這些問題

我決定將項目分成這些步驟以分離關(guān)注點,但我也想避免通過重新運行腳本來發(fā)出多個不必要的請求以從維基百科獲取 html。保存 html 文件,然后在單獨的腳本中使用它意味著您不需要不斷重新請求數(shù)據(jù),因為您已經(jīng)擁有了數(shù)據(jù)。

項目鏈接

此項目的 github 存儲庫的鏈接是:https://github.com/gabrielrowan/Foreign-Languages-Analysis

獲取html

首先,我檢索并輸出 html。使用 C# 和 C 后,我總是對 Python 代碼如此簡短和簡潔感到新奇?

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

解析 html

為了用 Beautiful soup 解析 html 并選擇我感興趣的表,我做了:

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


然后,我獲取了表標題文本來獲取 pandas 數(shù)據(jù)框的列名稱:

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

之后,我創(chuàng)建了數(shù)據(jù)框,設(shè)置列名稱,檢索每個表行并將每一行寫入數(shù)據(jù)框:

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


注意 - 不使用 strip() 時,文本中有 n 個不需要的字符。

最后,我將數(shù)據(jù)幀寫入 .csv。

分析數(shù)據(jù)

事先,我從數(shù)據(jù)中提出了我想回答的這些問題:

  1. 數(shù)據(jù)集中所有語言的母語總數(shù)是多少?
  2. 有多少種不同類型的語系?
  3. 每個語系的母語總數(shù)是多少?
  4. 最常用的 3 個語系是什么?
  5. 創(chuàng)建一個餅圖,顯示最常用的 3 個語系
  6. 最常見的語系-分支對是什么?
  7. 表中哪些語言屬于漢藏語系?
  8. 顯示所有羅曼語系和日耳曼語系語言的母語人士的條形圖
  9. 前 5 種語言占母語使用者總數(shù)的百分比是多少?
  10. 哪個分支的母語使用者最多,哪個分支最少?

結(jié)果

雖然我不會通過代碼來回答所有這些問題,但我會討論涉及圖表的兩個問題。

顯示所有羅曼語和日耳曼語母語的條形圖

首先,我創(chuàng)建了一個數(shù)據(jù)框,僅包含分支名稱為“Romance”或“Germanic”的行

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

然后我指定了圖表的 x 軸、y 軸和條形顏色:

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


這創(chuàng)建了:

Web scraping and analysing foreign languages data

創(chuàng)建一個餅圖,顯示 3 個最常用的語系

為了創(chuàng)建餅圖,我檢索了最常見的 3 個語系并將它們放入數(shù)據(jù)框中。

此代碼組獲取每個語系的母語人士總數(shù),按降序排序,并提取前 3 個條目。

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

然后我將數(shù)據(jù)放入餅圖中,指定“母語者”的 y 軸和圖例,這為圖表中顯示的每個語言系列創(chuàng)建顏色編碼標簽。

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


Web scraping and analysing foreign languages data

其余問題的代碼和回答可以在這里找到。我在筆記本中使用 Markdown 寫下問題及其答案。

下次:

對于我的網(wǎng)絡(luò)抓取和數(shù)據(jù)分析項目的下一次迭代,我想讓事情變得更復(fù)雜:

  • 網(wǎng)絡(luò)抓取動態(tài)頁面,點擊/滾動時會顯示更多數(shù)據(jù)
  • 分析更大的數(shù)據(jù)集,可能需要在分析之前進行一些數(shù)據(jù)清理工作

Web scraping and analysing foreign languages data

最后的想法

盡管速度很快,但我很喜歡做這個項目。它提醒我,簡短、可管理的項目對于讓練習代表參與進來有多么有用?另外,從互聯(lián)網(wǎng)提取數(shù)據(jù)并從中創(chuàng)建圖表,即使數(shù)據(jù)集很小,也很有趣?

以上是網(wǎng)絡(luò)抓取和分析外語數(shù)據(jù)的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何處理Python中的API身份驗證 如何處理Python中的API身份驗證 Jul 13, 2025 am 02:22 AM

處理API認證的關(guān)鍵在于理解并正確使用認證方式。1.APIKey是最簡單的認證方式,通常放在請求頭或URL參數(shù)中;2.BasicAuth使用用戶名和密碼進行Base64編碼傳輸,適合內(nèi)部系統(tǒng);3.OAuth2需先通過client_id和client_secret獲取Token,再在請求頭中帶上BearerToken;4.為應(yīng)對Token過期,可封裝Token管理類自動刷新Token;總之,根據(jù)文檔選擇合適方式,并安全存儲密鑰信息是關(guān)鍵。

解釋Python斷言。 解釋Python斷言。 Jul 07, 2025 am 12:14 AM

Assert是Python用于調(diào)試的斷言工具,當條件不滿足時拋出AssertionError。其語法為assert條件加可選錯誤信息,適用于內(nèi)部邏輯驗證如參數(shù)檢查、狀態(tài)確認等,但不能用于安全或用戶輸入檢查,且應(yīng)配合清晰提示信息使用,僅限開發(fā)階段輔助調(diào)試而非替代異常處理。

什么是Python迭代器? 什么是Python迭代器? Jul 08, 2025 am 02:56 AM

Inpython,IteratorSareObjectSthallowloopingThroughCollectionsByImplementing_iter __()和__next __()。1)iteratorsWiaTheIteratorProtocol,使用__ITER __()toreTurnterateratoratoranteratoratoranteratoratorAnterAnteratoratorant antheittheext__()

什么是Python型提示? 什么是Python型提示? Jul 07, 2025 am 02:55 AM

typeHintsInpyThonsolverbromblemboyofambiguityandPotentialBugSindyNamalytyCodeByallowingDevelopsosteSpecefectifyExpectedTypes.theyenhancereadability,enablellybugdetection,andimprovetool.typehintsupport.typehintsareadsareadsareadsareadsareadsareadsareadsareadsareaddedusidocolon(

如何一次迭代兩個列表 如何一次迭代兩個列表 Jul 09, 2025 am 01:13 AM

在Python中同時遍歷兩個列表的常用方法是使用zip()函數(shù),它會按順序配對多個列表并以最短為準;若列表長度不一致,可使用itertools.zip_longest()以最長為準并填充缺失值;結(jié)合enumerate()可同時獲取索引。1.zip()簡潔實用,適合成對數(shù)據(jù)迭代;2.zip_longest()處理不一致長度時可填充默認值;3.enumerate(zip())可在遍歷時獲取索引,滿足多種復(fù)雜場景需求。

Python Fastapi教程 Python Fastapi教程 Jul 12, 2025 am 02:42 AM

要使用Python創(chuàng)建現(xiàn)代高效的API,推薦使用FastAPI;其基于標準Python類型提示,可自動生成文檔,性能優(yōu)越。安裝FastAPI和ASGI服務(wù)器uvicorn后,即可編寫接口代碼。通過定義路由、編寫處理函數(shù)并返回數(shù)據(jù),可以快速構(gòu)建API。FastAPI支持多種HTTP方法,并提供自動生成的SwaggerUI和ReDoc文檔系統(tǒng)。URL參數(shù)可通過路徑定義捕獲,查詢參數(shù)則通過函數(shù)參數(shù)設(shè)置默認值實現(xiàn)。合理使用Pydantic模型有助于提升開發(fā)效率和準確性。

如何用Python測試API 如何用Python測試API Jul 12, 2025 am 02:47 AM

要測試API需使用Python的Requests庫,步驟為安裝庫、發(fā)送請求、驗證響應(yīng)、設(shè)置超時與重試。首先通過pipinstallrequests安裝庫;接著用requests.get()或requests.post()等方法發(fā)送GET或POST請求;然后檢查response.status_code和response.json()確保返回結(jié)果符合預(yù)期;最后可添加timeout參數(shù)設(shè)置超時時間,并結(jié)合retrying庫實現(xiàn)自動重試以增強穩(wěn)定性。

設(shè)置并使用Python虛擬環(huán)境 設(shè)置并使用Python虛擬環(huán)境 Jul 06, 2025 am 02:56 AM

虛擬環(huán)境能隔離不同項目的依賴。使用Python自帶的venv模塊創(chuàng)建,命令為python-mvenvenv;激活方式:Windows用env\Scripts\activate,macOS/Linux用sourceenv/bin/activate;安裝包使用pipinstall,生成需求文件用pipfreeze>requirements.txt,恢復(fù)環(huán)境用pipinstall-rrequirements.txt;注意事項包括不提交到Git、每次新開終端需重新激活、可用IDE自動識別切換。

See all articles