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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論