大數(shù)據(jù)采集與預(yù)處理課件:Selenium和ChromeDriver技術(shù)應(yīng)用案例-網(wǎng)站數(shù)據(jù)采集_第1頁
大數(shù)據(jù)采集與預(yù)處理課件:Selenium和ChromeDriver技術(shù)應(yīng)用案例-網(wǎng)站數(shù)據(jù)采集_第2頁
大數(shù)據(jù)采集與預(yù)處理課件:Selenium和ChromeDriver技術(shù)應(yīng)用案例-網(wǎng)站數(shù)據(jù)采集_第3頁
大數(shù)據(jù)采集與預(yù)處理課件:Selenium和ChromeDriver技術(shù)應(yīng)用案例-網(wǎng)站數(shù)據(jù)采集_第4頁
大數(shù)據(jù)采集與預(yù)處理課件:Selenium和ChromeDriver技術(shù)應(yīng)用案例-網(wǎng)站數(shù)據(jù)采集_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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é)會(huì)使用ChromeDriver和Selenium實(shí)現(xiàn)網(wǎng)站數(shù)據(jù)采集。熟悉業(yè)務(wù)網(wǎng)站新房數(shù)據(jù)采集的需求和流程。使用PyMySQL庫實(shí)現(xiàn)數(shù)據(jù)的持久化5.1 任務(wù)描述

本案例通過Chrome瀏覽器綜合分析業(yè)務(wù)網(wǎng)站新房網(wǎng)的網(wǎng)頁結(jié)構(gòu)和內(nèi)容,使用Selenium和ChromeDriver技術(shù)來實(shí)現(xiàn)業(yè)務(wù)網(wǎng)站新房網(wǎng)站數(shù)據(jù)采集。然后通過進(jìn)一步分析主頁后,獲取字段為房屋名稱(name)、地址(location)、價(jià)格(price)、房屋面積(size)的數(shù)據(jù)。最后,使用pymysql庫在MySQL數(shù)據(jù)管理系統(tǒng)中創(chuàng)建指定的數(shù)據(jù)庫house_database和數(shù)據(jù)表house_info,實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)。5.4 任務(wù)實(shí)現(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)、價(jià)格(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)擊左上角按鈕,可以快速定位頁面中各個(gè)元素的位置、相關(guān)屬性和值。如圖5-9。

圖5-9定位業(yè)務(wù)網(wǎng)站頁面元素接下來對數(shù)據(jù)進(jìn)行精確定位和操作,如圖5-10所示。將光標(biāo)定位到<ul>標(biāo)簽上,可以發(fā)現(xiàn)每一個(gè)<ul>標(biāo)簽當(dāng)中含有多個(gè)<li>標(biāo)簽,多個(gè)<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)簽層級(jí)位置(在此為“/html/body/div[6]/ul[2]”),如圖5-11所示。圖5-11獲取<ul>標(biāo)簽的Xpath路徑信息將光標(biāo)定位到其中一個(gè)<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的時(shí)間模塊,用于添加時(shí)間延遲。從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ù)定義一個(gè)函數(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類實(shí)現(xiàn)使用Chrome瀏覽器對象chrome_driver對瀏覽器10S的等待操作其中EC.presence_of_element_located是判斷條件,即等待指定元素(/html/body/div[6]/ul[2])出現(xiàn)在頁面上,如果該元素沒有在10S內(nèi)出現(xiàn),則會(huì)拋出‘TimeoutException’異常。house=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH,'/html/body/div[6]/ul[2]')))4.提取房源信息使用‘find_elements’方法中的CSS選擇器定位并獲取房源名稱元素,使用類名定位并獲取所有房源位置、房源價(jià)格和房源大小元素。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ā)生的異常,并打印錯(cuò)誤消息。try:{#獲取房源信息}exceptExceptionase:print("Anerroroccurredwhilefetchinghouseinformation:",e)使用‘finally’保證瀏覽器無論如何都會(huì)關(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) #移動(dòng)鼠標(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論