




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Selenium和ChromeDriver技術(shù)應(yīng)用案例——網(wǎng)站數(shù)據(jù)采集本章學(xué)習(xí)目標(biāo)分析業(yè)務(wù)網(wǎng)站新房網(wǎng)的網(wǎng)頁結(jié)構(gòu)和內(nèi)容理解ChromeDriver和Selenium的安裝和配置。學(xué)會使用ChromeDriver和Selenium實現(xiàn)網(wǎng)站數(shù)據(jù)采集。熟悉業(yè)務(wù)網(wǎng)站新房數(shù)據(jù)采集的需求和流程。使用PyMySQL庫實現(xiàn)數(shù)據(jù)的持久化5.1 任務(wù)描述
本案例通過Chrome瀏覽器綜合分析業(yè)務(wù)網(wǎng)站新房網(wǎng)的網(wǎng)頁結(jié)構(gòu)和內(nèi)容,使用Selenium和ChromeDriver技術(shù)來實現(xiàn)業(yè)務(wù)網(wǎng)站新房網(wǎng)站數(shù)據(jù)采集。然后通過進(jìn)一步分析主頁后,獲取字段為房屋名稱(name)、地址(location)、價格(price)、房屋面積(size)的數(shù)據(jù)。最后,使用pymysql庫在MySQL數(shù)據(jù)管理系統(tǒng)中創(chuàng)建指定的數(shù)據(jù)庫house_database和數(shù)據(jù)表house_info,實現(xiàn)數(shù)據(jù)的持久化存儲。5.4 任務(wù)實現(xiàn)-業(yè)務(wù)網(wǎng)站新房網(wǎng)站數(shù)據(jù)采集5.4.1 頁面分析
首先將對業(yè)務(wù)網(wǎng)站新房網(wǎng)的頁面結(jié)構(gòu)和內(nèi)容進(jìn)行深度分析,目的是找到業(yè)務(wù)網(wǎng)站新房網(wǎng)中的需求數(shù)據(jù)包括房屋名稱(name)、地址(location)、價格(price)、房屋面積(size)。1.打開業(yè)務(wù)網(wǎng)站新房頁面首先打開Chrome瀏覽器,在瀏覽器地址中輸入貝殼網(wǎng)的新房頁面地址cq.fang.ke/loupan/,按下回車頁面加載并顯示業(yè)務(wù)網(wǎng)站的新房列表,如圖5-7。圖5-7業(yè)務(wù)網(wǎng)站新房網(wǎng)首頁2.檢查頁面結(jié)構(gòu)使用瀏覽器的開發(fā)者工具,可以通過右鍵單擊頁面上的元素并選擇“檢查”來打開開發(fā)者工具窗口,如圖5-8。
圖5-8檢查網(wǎng)頁結(jié)構(gòu)3.定位元素在開發(fā)者工具中可以瀏覽頁面的HTML結(jié)構(gòu)和CSS樣式,點(diǎn)擊左上角按鈕,可以快速定位頁面中各個元素的位置、相關(guān)屬性和值。如圖5-9。
圖5-9定位業(yè)務(wù)網(wǎng)站頁面元素接下來對數(shù)據(jù)進(jìn)行精確定位和操作,如圖5-10所示。將光標(biāo)定位到<ul>標(biāo)簽上,可以發(fā)現(xiàn)每一個<ul>標(biāo)簽當(dāng)中含有多個<li>標(biāo)簽,多個<li>標(biāo)簽具有相同的標(biāo)簽結(jié)構(gòu)和內(nèi)容,上述規(guī)律為業(yè)務(wù)網(wǎng)站數(shù)據(jù)的獲取創(chuàng)造了條件。圖5-10業(yè)務(wù)網(wǎng)站新房網(wǎng)頁面結(jié)構(gòu)將光標(biāo)定位到<ul>標(biāo)簽上,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Copy”->“CopyXPath”命令,就能夠得到該控件在頁面中的標(biāo)簽層級位置(在此為“/html/body/div[6]/ul[2]”),如圖5-11所示。圖5-11獲取<ul>標(biāo)簽的Xpath路徑信息將光標(biāo)定位到其中一個<li>標(biāo)簽上,可以看到任務(wù)所需要的數(shù)據(jù)位于<li>標(biāo)簽的不同位置,如圖5-11。
圖5-12業(yè)務(wù)網(wǎng)站新房網(wǎng)頁面數(shù)據(jù)5.4.2 數(shù)據(jù)獲取通過前面的頁面分析,獲得了業(yè)務(wù)網(wǎng)站新房網(wǎng)數(shù)據(jù)采集過程中涉及的元素信息。接下來我們將使用Selenium和ChromeDriver訪問貝殼網(wǎng)頁面,定位并提取房源信息。1.導(dǎo)必要的庫導(dǎo)入Python的時間模塊,用于添加時間延遲。從Selenium庫中導(dǎo)入webdriver模塊,用于控制瀏覽器;導(dǎo)入By模塊,提供不同的元素定位方式;WebDriverWait模塊,用于等待特定條件出現(xiàn);導(dǎo)入expected_conditions模塊,用于定義等待條件。 importtime fromseleniumimportwebdriver fromselenium.webdrivermon.byimportBy fromselenium.webdriver.support.uiimportWebDriverWait fromselenium.webdriver.supportimportexpected_conditionsasEC2.數(shù)據(jù)采集函數(shù)定義一個函數(shù)fetch_house_info(page),用于從業(yè)務(wù)網(wǎng)站新房網(wǎng)頁面中獲取指定頁數(shù)的房源信息。deffetch_house_info(page):使用webdriver的Chrome方法初始化用于Chrome瀏覽器的對象,并賦值給chrome_driver。browser=webdriver.Chrome()使用Chrome瀏覽器對象chrome_driver的maximize_window()方法將瀏覽器設(shè)置為最大化。browser.maximize_window()使用Chrome瀏覽器對象chrome_driver的get()方法獲取業(yè)務(wù)網(wǎng)站新房網(wǎng)的URL。browser.get('cq.fang.ke/loupan/')使用WebDriverWait類實現(xiàn)使用Chrome瀏覽器對象chrome_driver對瀏覽器10S的等待操作其中EC.presence_of_element_located是判斷條件,即等待指定元素(/html/body/div[6]/ul[2])出現(xiàn)在頁面上,如果該元素沒有在10S內(nèi)出現(xiàn),則會拋出‘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’函數(shù)將相同索引位置元素組合在一起,從而創(chuàng)建字典表示的房源信息,并添加到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.異常處理和瀏覽器關(guān)閉使用‘try’和except捕獲任何可能發(fā)生的異常,并打印錯誤消息。try:{#獲取房源信息}exceptExceptionase:print("Anerroroccurredwhilefetchinghouseinformation:",e)使用‘finally’保證瀏覽器無論如何都會關(guān)閉,避免資源泄露。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業(yè)務(wù)網(wǎng)站新房網(wǎng)獲取數(shù)據(jù)持久化此外還可以指定捕獲網(wǎng)頁頁面數(shù),代碼如下。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() #創(chuàng)建ActionChains對象 actions=ActionChains(browser) #移動鼠標(biāo)到目標(biāo)元素上方 actions.move_to_element(element).perform() #點(diǎn)擊目標(biāo)元素 actions.click().perform() time.sleep(10)#Addappropriatedelay exceptExceptionase: print("Anerroroccur
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家裝櫥柜定制合同協(xié)議書
- 在學(xué)校開餐飲計劃書怎么寫
- 2025年油套管市場需求分析
- 數(shù)字媒體項目商業(yè)計劃書
- 貓常見病的防治
- 事件營銷文案策劃方案模板
- 智能家居環(huán)境監(jiān)測系統(tǒng)項目可行性分析報告
- 書籍類活動策劃書3
- 共享茶室商業(yè)計劃書方案
- 水泥企業(yè)收購調(diào)研報告
- 朗讀藝術(shù)入門學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- “雙減”背景下高中語文作業(yè)設(shè)計的優(yōu)化實踐與研究
- 《社區(qū)治理》 課件 第四章 社區(qū)治理模式
- 2024年同等學(xué)力申碩英語真題及答案
- 幕墻報價清單
- 三菱V73電路手冊電路圖
- 3.4重力壩的應(yīng)力分析資料
- 2024年福建省中考?xì)v史試卷(含標(biāo)準(zhǔn)答案及解析)
- 黑龍江省易地調(diào)動領(lǐng)導(dǎo)干部周轉(zhuǎn)住房管理辦法
- 骨科快速康復(fù)(ERAS)
- 【現(xiàn)代管理原理與應(yīng)用課程論文:X公司行政管理存在的問題及優(yōu)化建議探析3200字】
評論
0/150
提交評論