基于Python實現一鍵批量查詢郵編
第 1 節(jié):導入庫
本節(jié)導入所需的 Python 庫:
- pandas:用于數據操作和使用 Excel 文件。
- requests:用于向網站發(fā)出 HTTP GET 請求。
- bs4(BeautifulSoup):用于解析 HTML 內容。
- tqdm:用于在處理郵政編碼期間顯示進度條。
import pandas as pd import requests from bs4 import BeautifulSoup from tqdm import tqdm #列中不能有空值
第 2 節(jié):從網頁中提取元素的函數
本節(jié)定義了extract_elements以 apostal_code作為輸入的函數。它使用提供的郵政編碼向網站“ https://www.youbianku.com/ ”發(fā)送 HTTP GET 請求。然后,它使用 BeautifulSoup 解析 HTML 內容,并使用 CSS 選擇器從網頁中提取特定元素。如果找到所有必需的元素,則提取并返回它們的文本值;否則,返回 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 文件的路徑,同時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) # 獲取列名稱為 "POST" 的數據 postal_codes = df["POST"].tolist()
第 4 節(jié):處理郵政編碼和存儲結果
此部分處理列表中的每個郵政編碼postal_codes。它調用該extract_elements函數從網站中檢索每個郵政編碼的元素。如果找到元素,它們將與郵政編碼一起存儲在字典中并附加到列表中results。如果未找到元素,則存儲空字符串。顯示進度條tqdm以指示處理進度。最后,results列表被轉換為 pandas DataFrame output_df。
# 處理郵政編碼并將結果存儲在新的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é)中,DataFrame將保存到使用output_df指定的輸出 Excel 文件中。該參數確保行索引不包含在輸出中,打印消息“查詢完畢”(查詢完成),表明程序已經執(zhí)行完畢。
# 將結果保存到新的Excel文件中 output_df.to_excel(output_file, index=False) # 輸出查詢完畢字樣 print("查詢完畢")
第 6 節(jié):代碼總結
1.從網頁中提取特定元素:代碼使用requests庫發(fā)送HTTP GET請求,通過BeautifulSoup庫解析TML內容,并使用CSS選擇器從網頁中提取特定元素。這些元素可能包含在給定的郵政編碼對應的網頁中。如果成功到提取所有所需元素后,則將它們的值存儲起來,以供后續(xù)處理。
2.處理郵政編碼數據:代碼讀取輸入的Excel文件,獲取包含郵政編碼的列數據。然后,對每個郵政編碼進行處理,調用提取元素的函數,把提取到的元素及對應的郵政編碼存儲中結果列表中。如果某個郵政編碼無法提取到所需元素,則將空字符串存儲占位符。整個處理過程中,通過使用庫顯示細節(jié)條,提供處理細節(jié)的可視化tqdm。
3.將結果保存到Excel文件:將處理得到的結果列表轉換為pandasDataFrame,然后將其保存到指定的輸出Excel文件中。最終,代碼打印出“查詢完畢”的提示信息,表示程序執(zhí)行完畢。
第 7 節(jié):代碼運行實例
輸入文件:
輸出文件(省市縣是分開輸出的):
完整程序
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) # 獲取列名稱為 "POST" 的數據 postal_codes = df["POST"].tolist() # 處理郵政編碼并將結果存儲在新的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) # 將結果保存到新的Excel文件中 output_df.to_excel(output_file, index=False) # 輸出查詢完畢字樣 print("查詢完畢")
到此這篇關于基于Python實現一鍵批量查詢郵編的文章就介紹到這了,更多相關Python查詢郵編內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用python-Jenkins批量創(chuàng)建及修改jobs操作
這篇文章主要介紹了使用python-Jenkins批量創(chuàng)建及修改jobs操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05educoder之Python數值計算庫Numpy圖像處理詳解
這篇文章主要為大家介紹了educoder之Python數值計算庫Numpy圖像處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04