




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Selenium和ChromeDriver技術應用案例——網站數據采集本章學習目標分析業務網站新房網的網頁結構和內容理解ChromeDriver和Selenium的安裝和配置。學會使用ChromeDriver和Selenium實現網站數據采集。熟悉業務網站新房數據采集的需求和流程。使用PyMySQL庫實現數據的持久化5.1 任務描述
本案例通過Chrome瀏覽器綜合分析業務網站新房網的網頁結構和內容,使用Selenium和ChromeDriver技術來實現業務網站新房網站數據采集。然后通過進一步分析主頁后,獲取字段為房屋名稱(name)、地址(location)、價格(price)、房屋面積(size)的數據。最后,使用pymysql庫在MySQL數據管理系統中創建指定的數據庫house_database和數據表house_info,實現數據的持久化存儲。5.4 任務實現-業務網站新房網站數據采集5.4.1 頁面分析
首先將對業務網站新房網的頁面結構和內容進行深度分析,目的是找到業務網站新房網中的需求數據包括房屋名稱(name)、地址(location)、價格(price)、房屋面積(size)。1.打開業務網站新房頁面首先打開Chrome瀏覽器,在瀏覽器地址中輸入貝殼網的新房頁面地址cq.fang.ke/loupan/,按下回車頁面加載并顯示業務網站的新房列表,如圖5-7。圖5-7業務網站新房網首頁2.檢查頁面結構使用瀏覽器的開發者工具,可以通過右鍵單擊頁面上的元素并選擇“檢查”來打開開發者工具窗口,如圖5-8。
圖5-8檢查網頁結構3.定位元素在開發者工具中可以瀏覽頁面的HTML結構和CSS樣式,點擊左上角按鈕,可以快速定位頁面中各個元素的位置、相關屬性和值。如圖5-9。
圖5-9定位業務網站頁面元素接下來對數據進行精確定位和操作,如圖5-10所示。將光標定位到<ul>標簽上,可以發現每一個<ul>標簽當中含有多個<li>標簽,多個<li>標簽具有相同的標簽結構和內容,上述規律為業務網站數據的獲取創造了條件。圖5-10業務網站新房網頁面結構將光標定位到<ul>標簽上,單擊鼠標右鍵,在彈出的快捷菜單中選擇“Copy”->“CopyXPath”命令,就能夠得到該控件在頁面中的標簽層級位置(在此為“/html/body/div[6]/ul[2]”),如圖5-11所示。圖5-11獲取<ul>標簽的Xpath路徑信息將光標定位到其中一個<li>標簽上,可以看到任務所需要的數據位于<li>標簽的不同位置,如圖5-11。
圖5-12業務網站新房網頁面數據5.4.2 數據獲取通過前面的頁面分析,獲得了業務網站新房網數據采集過程中涉及的元素信息。接下來我們將使用Selenium和ChromeDriver訪問貝殼網頁面,定位并提取房源信息。1.導必要的庫導入Python的時間模塊,用于添加時間延遲。從Selenium庫中導入webdriver模塊,用于控制瀏覽器;導入By模塊,提供不同的元素定位方式;WebDriverWait模塊,用于等待特定條件出現;導入expected_conditions模塊,用于定義等待條件。 importtime fromseleniumimportwebdriver fromselenium.webdrivermon.byimportBy fromselenium.webdriver.support.uiimportWebDriverWait fromselenium.webdriver.supportimportexpected_conditionsasEC2.數據采集函數定義一個函數fetch_house_info(page),用于從業務網站新房網頁面中獲取指定頁數的房源信息。deffetch_house_info(page):使用webdriver的Chrome方法初始化用于Chrome瀏覽器的對象,并賦值給chrome_driver。browser=webdriver.Chrome()使用Chrome瀏覽器對象chrome_driver的maximize_window()方法將瀏覽器設置為最大化。browser.maximize_window()使用Chrome瀏覽器對象chrome_driver的get()方法獲取業務網站新房網的URL。browser.get('cq.fang.ke/loupan/')使用WebDriverWait類實現使用Chrome瀏覽器對象chrome_driver對瀏覽器10S的等待操作其中EC.presence_of_element_located是判斷條件,即等待指定元素(/html/body/div[6]/ul[2])出現在頁面上,如果該元素沒有在10S內出現,則會拋出‘TimeoutException’異常。house=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH,'/html/body/div[6]/ul[2]')))4.提取房源信息使用‘find_elements’方法中的CSS選擇器定位并獲取房源名稱元素,使用類名定位并獲取所有房源位置、房源價格和房源大小元素。housenames=house.find_elements(By.CSS_SELECTOR,"[class='name']")
houselocations=house.find_elements(By.CLASS_NAME,'resblock-location')
houseprices=house.find_elements(By.CLASS_NAME,'number')
housesizes=house.find_elements(By.CLASS_NAME,'resblock-room')使用’zip’函數將相同索引位置元素組合在一起,從而創建字典表示的房源信息,并添加到houses列表中。forname,location,price,sizeinzip(housenames,houselocations,houseprices,housesizes):
house={"name":name.text,"location":location.text,"price":price.text,"size":size.text}
houses.append(house)5.異常處理和瀏覽器關閉使用‘try’和except捕獲任何可能發生的異常,并打印錯誤消息。try:{#獲取房源信息}exceptExceptionase:print("Anerroroccurredwhilefetchinghouseinformation:",e)使用‘finally’保證瀏覽器無論如何都會關閉,避免資源泄露。finally:browser.quit()完整代碼如下。importtime fromseleniumimportwebdriver fromselenium.webdrivermon.byimportBy fromselenium.webdriver.support.uiimportWebDriverWait fromselenium.webdriver.supportimportexpected_conditionsasEC deffetch_house_info(page): browser=webdriver.Chrome() browser.maximize_window() browser.get('cq.fang.ke/loupan/') time.sleep(5)#等待頁面加載 houses=[] try:house=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH,'/html/body/div[6]/ul[2]')))time.sleep(5)#獲取房源信息housenames=house.find_elements(By.CSS_SELECTOR,"[class='name']")houselocations=house.find_elements(By.CLASS_NAME,'resblock-location')houseprices=house.find_elements(By.CLASS_NAME,'number')housesizes=house.find_elements(By.CLASS_NAME,'resblock-room')forname,location,price,sizeinzip(housenames,houselocations,houseprices,housesizes):
house={"name":name.text,"location":location.text,"price":price.text,"size":size.text}
houses.append(house)exceptExceptionase:
print("Anerroroccurredwhilefetchinghouseinformation:",e)finally:
browser.quit()returnhouses
圖5-13業務網站新房網獲取數據持久化此外還可以指定捕獲網頁頁面數,代碼如下。importtime fromscraperimportfetch_house_info fromstorageimportstore_house_info fromseleniumimportwebdriver fromselenium.webdrivermon.action_chainsimportActionChains fromselenium.webdrivermon.byimportBydefmain(pages_to_crawl): browser=webdriver.Chrome() browser.maximize_window()browser.get('cq.fang.ke/loupan/') #等待頁面加載 time.sleep(5) try: forpageinrange(1,pages_to_crawl+1): houses=fetch_house_info(browser) store_house_info(houses) element=browser.find_element(By.CLASS_NAME,'next') #element.click() #創建ActionChains對象 actions=ActionChains(browser) #移動鼠標到目標元素上方 actions.move_to_element(element).perform() #點擊目標元素 actions.click().perform() time.sleep(10)#Addappropriatedelay exceptExceptionase: print("Anerroroccur
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校長課堂唱歌活動方案
- 校長述職活動方案
- 江蘇互聯網培訓活動方案
- 殘疾人送鮮花活動方案
- 水電安全活動方案
- 漢堡店充值活動方案
- 正規公司服裝策劃方案
- 河南微信活動方案
- 汽車俱樂部開展活動方案
- 殘疾人集中服務活動方案
- 【蘇州智能制造研究院】2025半導體量檢測行業白皮書
- GB/T 7573-2025紡織品水萃取液pH值的測定
- 2024年廣東省中考數學試卷【含解析】
- 隨班就讀培訓
- 停車場管理的難點及解決措施
- 腎內科護士長述職報告
- 我國智慧養老產業的發展現狀、挑戰與對策
- 第五講-鑄牢中華民族共同體意識-2024年形勢與政策(講稿)
- 高空作業施工方案四篇
- 2025年度電商直播平臺主播直播內容版權購買合同3篇
- 壓型機安全操作規程范文(2篇)
評論
0/150
提交評論