Python網(wǎng)絡(luò)爬蟲技術(shù)-第4章-常規(guī)動態(tài)網(wǎng)頁爬取_第1頁
Python網(wǎng)絡(luò)爬蟲技術(shù)-第4章-常規(guī)動態(tài)網(wǎng)頁爬取_第2頁
Python網(wǎng)絡(luò)爬蟲技術(shù)-第4章-常規(guī)動態(tài)網(wǎng)頁爬取_第3頁
Python網(wǎng)絡(luò)爬蟲技術(shù)-第4章-常規(guī)動態(tài)網(wǎng)頁爬取_第4頁
Python網(wǎng)絡(luò)爬蟲技術(shù)-第4章-常規(guī)動態(tài)網(wǎng)頁爬取_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

常規(guī)動態(tài)網(wǎng)頁爬取2024/6/301使用Selenium庫爬取動態(tài)網(wǎng)頁目錄逆向分析爬取動態(tài)網(wǎng)頁2存儲數(shù)據(jù)至MongoDB數(shù)據(jù)庫3小結(jié)4在瀏覽器中打開網(wǎng)站“”,按“F12”鍵調(diào)出Chrome開發(fā)者工具或者單擊“更多工具”選項中的“開發(fā)者工具”選項。Chrome開發(fā)者工具中的元素面板上顯示的是瀏覽器執(zhí)行JavaScript之后生成的HTML源碼。找到解決方案的第一條數(shù)據(jù)對應(yīng)的HTML源碼,如圖所示。了解靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁區(qū)別1.判斷靜態(tài)網(wǎng)頁還有另一種方法查看源碼,右鍵單擊鼠標(biāo)頁面,選擇“查看頁面源代碼”,如圖所示。了解靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁區(qū)別得到服務(wù)器直接返回的HTML源碼,找到解決方案的第一條數(shù)據(jù)的信息,如圖所示。了解靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁區(qū)別在瀏覽器中打開網(wǎng)站“”,按“F12”鍵調(diào)出Chrome開發(fā)者工具,找到“互聯(lián)網(wǎng)+智慧城市核心技術(shù)及行業(yè)應(yīng)用”的HTML信息,如圖所示。了解靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁區(qū)別2.判斷動態(tài)網(wǎng)頁在瀏覽器呈現(xiàn)的網(wǎng)頁中,右鍵單擊頁面,單擊“查看頁面源代碼”選項,在彈出的HTML源碼中,查找“互聯(lián)網(wǎng)+智慧城市核心技術(shù)及行業(yè)應(yīng)用”關(guān)鍵字,如圖所示。了解靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁區(qū)別在確認(rèn)網(wǎng)頁是動態(tài)網(wǎng)頁后,需要獲取從網(wǎng)頁響應(yīng)中由JavaScript動態(tài)加載生成的信息,在Chrome瀏覽器中爬取“”網(wǎng)頁的信息,步驟如下?!癋12”鍵打開“”網(wǎng)頁的Chrome開發(fā)者工具,如圖所示。逆向分析爬取動態(tài)網(wǎng)頁單擊網(wǎng)絡(luò)面板后,發(fā)現(xiàn)有很多響應(yīng)。在網(wǎng)絡(luò)面板中XHR是Ajax中的概念,表示XML-HTTP-request,一般Javascript加載的文件隱藏在JS或者XHR。通過查找發(fā)現(xiàn),“”網(wǎng)頁。“新書”模塊的信息在XHR的Preview標(biāo)簽中有需要的信息。在網(wǎng)絡(luò)面板的XHR中,查看“/bookinfo”資源的Preview信息,可以看到網(wǎng)頁新書的HTML信息,如圖所示。逆向分析爬取動態(tài)網(wǎng)頁若需要爬取“”網(wǎng)頁標(biāo)題信息,則步驟如下。單擊“/bookinfo”資源的Headers標(biāo)簽,找到“RequestURL”信息,如圖所示。逆向分析爬取動態(tài)網(wǎng)頁打開“RequestURL”URL網(wǎng)址信息,找到需要爬取的信息,如圖所示。爬取“”首頁新書模塊的書名、作者和價格,如代碼4?1所示。逆向分析爬取動態(tài)網(wǎng)頁1使用Selenium庫爬取動態(tài)網(wǎng)頁目錄逆向分析爬取動態(tài)網(wǎng)頁2存儲數(shù)據(jù)至MongoDB數(shù)據(jù)庫3小結(jié)4以Chrome瀏覽器的chromedrive補(bǔ)丁為例,在安裝好Selenium3.9.0之后,下載并安裝chromedrive補(bǔ)丁的步驟如下。在Selenium官網(wǎng)下載對應(yīng)版本的補(bǔ)丁。下載如圖所示的“GoogleChromeDriver2.36”文件,根據(jù)操作系統(tǒng)選擇chromedrive文件。將下載好的chromedrive.exe文件,存放至python安裝根目錄(與python.exe文件同一目錄)即可。安裝Selenium庫以及下載瀏覽器補(bǔ)丁SeleniumWebdriver提供兩種類型的等待——隱式和顯式。顯式的等待使網(wǎng)絡(luò)驅(qū)動程序在繼續(xù)執(zhí)行之前等待某個條件的發(fā)生。隱式的等待使WebDriver在嘗試定位一個元素時,在一定的時間內(nèi)輪詢DOM。在爬取“/search/books”網(wǎng)頁搜索“Python編程”關(guān)鍵詞過程中,用到了顯示等待,本節(jié)主要介紹顯示等待。顯式等待是指定某個條件,然后設(shè)置最長等待時間。如果在這個時間還沒有找到元素,那么便會拋出異常,在登錄“/search/books”網(wǎng)頁等待10秒。WebDriverWait函數(shù)是默認(rèn)每500毫秒調(diào)用一次ExpectedCondition,直到成功返回。ExpectedCondition的成功返回類型是布爾值,對于所有其他ExpectedCondition類型,則返回True或非Null返回值。如果在10秒內(nèi)不能發(fā)現(xiàn)元素返回,就會在拋出TimeoutException異常。WebDriverWait的語法使用格式如下。頁面等待WebDriverWait(driver,等待時間)HTML表單包含了表單元素,而表單元素指的是不同類型的input元素、復(fù)選框、單選按鈕、提交按鈕等。填寫完表單后,需要提交表單。定位“搜索”按鈕并復(fù)制該元素的selector,如圖所示。頁面操作1.填充表單Selenium庫中的execute_script方法能夠直接調(diào)用JavaScript方法來實現(xiàn)翻頁到底部、彈框等操作。比如在“/search/books”網(wǎng)頁中通過JavaScript翻到頁面底部,并彈框提示爬蟲。頁面操作2.執(zhí)行JavaScript在頁面中定位元素有多種策略。Selenium庫提供了如表所示的方法來定位頁面中的元素,使用find_element進(jìn)行元素選取。在單元素查找中使用到了通過元素ID進(jìn)行定位、通過XPath表達(dá)式進(jìn)行定位、通過CSS選擇器進(jìn)行定位等操作。在多元素查找中使用到了通過CSS選擇器進(jìn)行定位等操作。元素選取定位一個元素定位多個元素含義find_element_by_idfind_elements_by_id通過元素ID進(jìn)行定位find_element_by_namefind_elements_by_name通過元素名稱進(jìn)行定位find_element_by_xpathfind_elements_by_xpath通過XPath表達(dá)式進(jìn)行定位find_element_by_link_textfind_elements_by_link_text通過完整超鏈接文本進(jìn)行定位find_element_by_partial_link_textfind_elements_by_partial_link_text通過部分超鏈接文本進(jìn)行定位find_element_by_tag_namefind_elements_by_tag_name通過標(biāo)記名稱進(jìn)行定位find_element_by_class_namefind_elements_by_class_name通過類名進(jìn)行定位find_element_by_css_selectorfind_elements_by_css_selector通過CSS選擇器進(jìn)行定位Selenium庫的find_element的語法使用格式如下。元素選取driver.find_element_by_id(By.method,‘selector_url’)獲取“/search/books”響應(yīng)的網(wǎng)頁搜索框架元素,如圖所示。元素選取1.單個元素查找查找“/search/books”網(wǎng)頁第一行多個信息,復(fù)制到selector的信息是“#nav”如圖所示。元素選取2.多個元素查找在自動化Web瀏覽器時,不需要手動編寫期望的條件類,也不必為自動化創(chuàng)建實用程序包,Selenium庫提供了一些便利的判斷方法如表4?2所示,在爬取“/search/books”網(wǎng)頁搜索“Python編程”關(guān)鍵詞的過程中,用到了element_to_be_clickable方法、元素是否可點(diǎn)擊等判斷方法。預(yù)期的條件方法作用title_is標(biāo)題是某內(nèi)容title_contains標(biāo)題包含某內(nèi)容presence_of_element_located元素加載出,傳入定位元組,如(By.ID,'p')visibility_of_element_located元素可見,傳入定位元組visibility_of傳入元素對象presence_of_all_elements_located所有元素加載出text_to_be_present_in_element某個元素文本包含某文字text_to_be_present_in_element_value某個元素值包含某文字方法作用frame_to_be_available_and_switch_to_itframe加載并切換invisibility_of_element_located元素不可見element_to_be_clickable元素可點(diǎn)擊staleness_of判斷一個元素是否仍在DOM,可判斷頁面是否已經(jīng)刷新element_to_be_selected元素可選擇,傳元素對象element_located_to_be_selected元素可選擇,傳入定位元組element_selection_state_to_be傳入元素對象以及狀態(tài),相等返回True,否則返回Falseelement_located_selection_state_to_be傳入定位元組以及狀態(tài),相等返回True,否則返回Falsealert_is_present是否出現(xiàn)Alert預(yù)期的條件1分析方法與過程目錄背景與挖掘目標(biāo)2結(jié)果分析3小結(jié)4傳統(tǒng)的關(guān)系數(shù)據(jù)庫一般由數(shù)據(jù)庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB是由數(shù)據(jù)庫(database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB中的概念和MySQL中的概念進(jìn)行對比,如表所示。了解MongoDB數(shù)據(jù)庫和MySQL數(shù)據(jù)庫的區(qū)別SQL概念MongoDB概念說明databasedatabase數(shù)據(jù)庫tablecollection數(shù)據(jù)庫表∕集合rowdocument數(shù)據(jù)庫行∕文檔columnfield數(shù)據(jù)字段列∕域indexindex索引primarykeyprimarykey主鍵了解MongoDB數(shù)據(jù)庫和MySQL數(shù)據(jù)庫的區(qū)別操作說明MySQLMongoDB顯示庫列表showdatabases;showdbs進(jìn)入庫usedbname;showcollections創(chuàng)建庫createdatabasename;無需單獨(dú)創(chuàng)建,直接show進(jìn)去,默認(rèn)創(chuàng)建庫創(chuàng)建表createtabletname(idint);無需單獨(dú)創(chuàng)建,直接插入數(shù)據(jù)刪除表droptabletname;db.tname.drop()刪除庫dropdatabasedbname;首先進(jìn)去該庫,使用db.dropDatabase()命令插入記錄insertintotname(id)value(1);db.tname.insert({id:1})刪除記錄deletefromtnamewhereid=1;db.tname.remove({id:1})查詢所有記錄select*fromtname;db.tname.find()條件查詢select*fromtnamewhereid=2;db.tname.find({id:2})多條件查詢select*fromtnamewhereid=2

orname='python';db.tname.find($or:[{id:2},

{name:'python'}])查詢一條數(shù)據(jù)select*fromtnamelimit1;db.tname.findone()獲取表記錄數(shù)selectcount(id)fromtname;db.tname.count()MongoDB具有獨(dú)特操作語句,與MySQL使用傳統(tǒng)的sql語句不同。MongoDB與MySQL基本操作命令的區(qū)別如表所示。pymongo是Python用于操作MongoDB的模塊,在導(dǎo)入pymongo模塊之前,需要先使用pip命令安裝pymongo模塊,安裝成功之后,導(dǎo)入pymongo模塊,然后建立連接。MongoDB連接字符串的格式如下。2.獲取數(shù)據(jù)庫MongoDB的一個實例可以支持多個獨(dú)立的數(shù)據(jù)庫。在使用pymongo模塊時,可以使用MongoClient實例上的屬性的方式來訪問數(shù)據(jù)庫,如果數(shù)據(jù)庫名稱使用屬性方式訪問無法正常工作(如:python-db),也可以使用字典方式訪問。將數(shù)據(jù)存儲入MongoDB數(shù)據(jù)庫1.建立連接數(shù)據(jù)庫產(chǎn)品名://主機(jī)IP:主機(jī)端口集合是存儲在MongoDB中的一組文檔,可以類似于關(guān)系數(shù)據(jù)庫中的表。在pymongo模塊中獲取集合的方式與獲取數(shù)據(jù)庫一樣,或者使用字典方式獲取集合。4.插入文檔數(shù)據(jù)在MongoDB中是以JSON類文件的形式保存起來的,而且存儲到MongoDB數(shù)據(jù)庫中的數(shù)據(jù)類型必須是{key:value}型的。在pymongo模塊中使用inset_one方法插入文檔,將4.1.2小節(jié)爬取到的新

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論