基于Python實(shí)現(xiàn)一鍵批量查詢(xún)郵編
第 1 節(jié):導(dǎo)入庫(kù)
本節(jié)導(dǎo)入所需的 Python 庫(kù):
- pandas:用于數(shù)據(jù)操作和使用 Excel 文件。
- requests:用于向網(wǎng)站發(fā)出 HTTP GET 請(qǐng)求。
- bs4(BeautifulSoup):用于解析 HTML 內(nèi)容。
- tqdm:用于在處理郵政編碼期間顯示進(jìn)度條。
import pandas as pd import requests from bs4 import BeautifulSoup from tqdm import tqdm #列中不能有空值
第 2 節(jié):從網(wǎng)頁(yè)中提取元素的函數(shù)
本節(jié)定義了extract_elements以 apostal_code作為輸入的函數(shù)。它使用提供的郵政編碼向網(wǎng)站“ https://www.youbianku.com/ ”發(fā)送 HTTP GET 請(qǐng)求。然后,它使用 BeautifulSoup 解析 HTML 內(nèi)容,并使用 CSS 選擇器從網(wǎng)頁(yè)中提取特定元素。如果找到所有必需的元素,則提取并返回它們的文本值;否則,返回 None。
def extract_elements(postal_code): url = f"https://www.youbianku.com/{postal_code}" response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") element_1 = soup.select_one("#mw-content-text > div.mw-parser-output > div:nth-child(2) > div > span:nth-child(2) > a > span") element_2 = soup.select_one("#mw-content-text > div.mw-parser-output > div:nth-child(2) > div > span:nth-child(3) > a > span") element_3 = soup.select_one("#mw-content-text > div.mw-parser-output > div:nth-child(2) > div > span:nth-child(4) > a > span") if element_1 and element_2 and element_3: text_1 = element_1.text text_2 = element_2.text text_3 = element_3.text.replace(f"{text_1}{text_2}", "") return text_1, text_2, text_3 else: return None
第 3 節(jié):輸入和輸出文件路徑
在本節(jié)中,指定輸入和輸出文件路徑。input_file保存輸入 Excel 文件的路徑,同時(shí)output_file保存將創(chuàng)建的輸出 Excel 文件的路徑。該程序還使用讀取輸入 Excel 文件pd.read_excel()并將“POST”列中的值檢索到postal_codes列表中。
# 讀取Excel文件 input_file = r"C:\Users\aa\Desktop\POST.xlsx" output_file = r"C:\Users\aa\Desktop\P.xlsx" df = pd.read_excel(input_file) # 獲取列名稱(chēng)為 "POST" 的數(shù)據(jù) postal_codes = df["POST"].tolist()
第 4 節(jié):處理郵政編碼和存儲(chǔ)結(jié)果
此部分處理列表中的每個(gè)郵政編碼postal_codes。它調(diào)用該extract_elements函數(shù)從網(wǎng)站中檢索每個(gè)郵政編碼的元素。如果找到元素,它們將與郵政編碼一起存儲(chǔ)在字典中并附加到列表中results。如果未找到元素,則存儲(chǔ)空字符串。顯示進(jìn)度條tqdm以指示處理進(jìn)度。最后,results列表被轉(zhuǎn)換為 pandas DataFrame output_df。
# 處理郵政編碼并將結(jié)果存儲(chǔ)在新的DataFrame中 results = [] with tqdm(total=len(postal_codes), desc="Processing") as pbar: for postal_code in postal_codes: elements = extract_elements(str(postal_code)) if elements: element_1, element_2, element_3 = elements results.append({"Postal Code": postal_code, "Element 1": element_1, "Element 2": element_2, "Element 3": element_3}) else: results.append({"Postal Code": postal_code, "Element 1": "", "Element 2": "", "Element 3": ""}) pbar.update(1) output_df = pd.DataFrame(results)
第 5 節(jié):將結(jié)果保存到輸出文件
在本節(jié)中,DataFrame將保存到使用output_df指定的輸出 Excel 文件中。該參數(shù)確保行索引不包含在輸出中,打印消息“查詢(xún)完畢”(查詢(xún)完成),表明程序已經(jīng)執(zhí)行完畢。
# 將結(jié)果保存到新的Excel文件中 output_df.to_excel(output_file, index=False) # 輸出查詢(xún)完畢字樣 print("查詢(xún)完畢")
第 6 節(jié):代碼總結(jié)
1.從網(wǎng)頁(yè)中提取特定元素:代碼使用requests庫(kù)發(fā)送HTTP GET請(qǐng)求,通過(guò)BeautifulSoup庫(kù)解析TML內(nèi)容,并使用CSS選擇器從網(wǎng)頁(yè)中提取特定元素。這些元素可能包含在給定的郵政編碼對(duì)應(yīng)的網(wǎng)頁(yè)中。如果成功到提取所有所需元素后,則將它們的值存儲(chǔ)起來(lái),以供后續(xù)處理。
2.處理郵政編碼數(shù)據(jù):代碼讀取輸入的Excel文件,獲取包含郵政編碼的列數(shù)據(jù)。然后,對(duì)每個(gè)郵政編碼進(jìn)行處理,調(diào)用提取元素的函數(shù),把提取到的元素及對(duì)應(yīng)的郵政編碼存儲(chǔ)中結(jié)果列表中。如果某個(gè)郵政編碼無(wú)法提取到所需元素,則將空字符串存儲(chǔ)占位符。整個(gè)處理過(guò)程中,通過(guò)使用庫(kù)顯示細(xì)節(jié)條,提供處理細(xì)節(jié)的可視化tqdm。
3.將結(jié)果保存到Excel文件:將處理得到的結(jié)果列表轉(zhuǎn)換為pandasDataFrame,然后將其保存到指定的輸出Excel文件中。最終,代碼打印出“查詢(xún)完畢”的提示信息,表示程序執(zhí)行完畢。
第 7 節(jié):代碼運(yùn)行實(shí)例
輸入文件:
輸出文件(省市縣是分開(kāi)輸出的):
完整程序
import pandas as pd import requests from bs4 import BeautifulSoup from tqdm import tqdm #列中不能有空值 def extract_elements(postal_code): url = f"https://www.youbianku.com/{postal_code}" response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") element_1 = soup.select_one("#mw-content-text > div.mw-parser-output > div:nth-child(2) > div > span:nth-child(2) > a > span") element_2 = soup.select_one("#mw-content-text > div.mw-parser-output > div:nth-child(2) > div > span:nth-child(3) > a > span") element_3 = soup.select_one("#mw-content-text > div.mw-parser-output > div:nth-child(2) > div > span:nth-child(4) > a > span") if element_1 and element_2 and element_3: text_1 = element_1.text text_2 = element_2.text text_3 = element_3.text.replace(f"{text_1}{text_2}", "") return text_1, text_2, text_3 else: return None # 讀取Excel文件 input_file = r"C:\Users\aa\Desktop\POST.xlsx" output_file = r"C:\Users\aa\Desktop\P.xlsx" df = pd.read_excel(input_file) # 獲取列名稱(chēng)為 "POST" 的數(shù)據(jù) postal_codes = df["POST"].tolist() # 處理郵政編碼并將結(jié)果存儲(chǔ)在新的DataFrame中 results = [] with tqdm(total=len(postal_codes), desc="Processing") as pbar: for postal_code in postal_codes: elements = extract_elements(str(postal_code)) if elements: element_1, element_2, element_3 = elements results.append({"Postal Code": postal_code, "Element 1": element_1, "Element 2": element_2, "Element 3": element_3}) else: results.append({"Postal Code": postal_code, "Element 1": "", "Element 2": "", "Element 3": ""}) pbar.update(1) output_df = pd.DataFrame(results) # 將結(jié)果保存到新的Excel文件中 output_df.to_excel(output_file, index=False) # 輸出查詢(xún)完畢字樣 print("查詢(xún)完畢")
到此這篇關(guān)于基于Python實(shí)現(xiàn)一鍵批量查詢(xún)郵編的文章就介紹到這了,更多相關(guān)Python查詢(xún)郵編內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法
今天小編就為大家分享一篇python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)例講解
這篇文章主要為大家詳細(xì)介紹了Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)例,爬蟲(chóng)的定義、主要框架等基礎(chǔ)概念,感興趣的小伙伴們可以參考一下2016-04-04python開(kāi)發(fā)實(shí)時(shí)可視化儀表盤(pán)的示例
這篇文章主要介紹了python開(kāi)發(fā)實(shí)時(shí)可視化儀表盤(pán)的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05使用python-Jenkins批量創(chuàng)建及修改jobs操作
這篇文章主要介紹了使用python-Jenkins批量創(chuàng)建及修改jobs操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05educoder之Python數(shù)值計(jì)算庫(kù)Numpy圖像處理詳解
這篇文章主要為大家介紹了educoder之Python數(shù)值計(jì)算庫(kù)Numpy圖像處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04python中不能連接超時(shí)的問(wèn)題及解決方法
這篇文章主要介紹了python中不能連接超時(shí)的問(wèn)題及解決方法,需要的朋友可以參考下2018-06-06在Django的視圖中使用數(shù)據(jù)庫(kù)查詢(xún)的方法
這篇文章主要介紹了在Django的視圖中使用數(shù)據(jù)庫(kù)查詢(xún)的方法,是Python的Django框架使用的基礎(chǔ)操作,需要的朋友可以參考下2015-07-07python如何實(shí)現(xiàn)MK突變檢驗(yàn)方法,代碼復(fù)制修改可用
這篇文章主要介紹了python如何實(shí)現(xiàn)MK突變檢驗(yàn)方法,代碼復(fù)制修改可用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05