柚子快報(bào)邀請(qǐng)碼778899分享:爬蟲技術(shù)實(shí)驗(yàn)報(bào)告
柚子快報(bào)邀請(qǐng)碼778899分享:爬蟲技術(shù)實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)?zāi)康?1、通過實(shí)驗(yàn)和分析,評(píng)估不同的等待機(jī)制在Python動(dòng)態(tài)網(wǎng)頁爬蟲中的使用效果和性能差異。 2、通過對(duì)比不同等待機(jī)制的優(yōu)缺點(diǎn),可以更好地了解何時(shí)使用何種等待機(jī)制,并選擇最適合自己需求的方法。 3、對(duì)于網(wǎng)頁進(jìn)行請(qǐng)求,然后抓取所需的內(nèi)容,最后存儲(chǔ)數(shù)據(jù),可以了解爬取的過程。 二、實(shí)驗(yàn)內(nèi)容和要求 Exercise 1 1、利用實(shí)際的Python動(dòng)態(tài)網(wǎng)頁爬蟲為例,來了解3種等待(Waits) 機(jī)制 2、詳細(xì)的實(shí)作內(nèi)容可以參考以下的GitHub網(wǎng)址 https://github.com/mikekul116/pythonpchome-scraper Exercise 2 比較三種等待機(jī)制,各自的優(yōu)缺點(diǎn) Exercise 3 1、實(shí)驗(yàn)分析三種等待機(jī)制,各自適用的數(shù)據(jù)量狀態(tài)與應(yīng)用 2、跑一支任意程序,針對(duì)不同的等待,連續(xù)三次,紀(jì)錄時(shí)間,做成圖 Exercise 4 https://www.webscrapingpro.tw/what-is-web-scraping/ 實(shí)際范例演練 三、實(shí)驗(yàn)環(huán)境 Python
四、實(shí)驗(yàn)方法和步驟 1、利用實(shí)際的Python動(dòng)態(tài)網(wǎng)頁爬蟲為例,來了解3種等待(Waits) 機(jī)制 由于提供的代碼中的selenium庫版本較低,而新版本的selenium庫可以不必設(shè)置driver.exe路徑。如果不修改代碼則需要降低selenium庫的版本,或者修改代碼。我下面的代碼都是修改代碼,而不是降低selenium庫的版本。 (1)強(qiáng)制等待(sleep) a、導(dǎo)入所需的庫
b、創(chuàng)建一個(gè)Chrome瀏覽器的實(shí)例
c、browser.get()方法打開目標(biāo)網(wǎng)站
d、設(shè)置強(qiáng)制等待等待時(shí)間,等待頁面加載完成
e、使用find_element()方法找到需要的元素,并執(zhí)行相應(yīng)的操作
(2)明確等待(explicit) a、導(dǎo)入所需的庫
b、創(chuàng)建一個(gè)Chrome瀏覽器的實(shí)例
c、browser.get()方法打開目標(biāo)網(wǎng)站
d、設(shè)置明確等待等待時(shí)間,等待頁面加載完成
e、定位到需要的元素,并執(zhí)行相應(yīng)的操作
(3)隱含等待(implicit) a、導(dǎo)入所需的庫
b、創(chuàng)建一個(gè)Chrome瀏覽器的實(shí)例
c、browser.get()方法打開目標(biāo)網(wǎng)站
d、設(shè)置隱含等待等待時(shí)間,等待頁面加載完成
e、使用find_element()方法找到需要的元素,并執(zhí)行相應(yīng)的操作
2、比較三種等待機(jī)制,各自的優(yōu)缺點(diǎn) 強(qiáng)制等待(sleep): 優(yōu)點(diǎn):實(shí)現(xiàn)簡單,直接暫停程序執(zhí)行指定的時(shí)間。 缺點(diǎn):不靈活,等待時(shí)間固定,無法根據(jù)頁面加載情況來調(diào)整等待時(shí)間。如果頁面加載較快,等待時(shí)間過長導(dǎo)致浪費(fèi);如果頁面加載較慢,等待時(shí)間過短導(dǎo)致找不到元素而報(bào)錯(cuò)。 例子:你在家里等朋友來拜訪,但你不知道他們什么時(shí)候會(huì)到達(dá)。于是你決定在指定的時(shí)間等待一段時(shí)間,比如說你決定等待10分鐘。在這10分鐘內(nèi),你無論朋友們是否到達(dá),你都會(huì)一直等待。就是說你在指定的時(shí)間段內(nèi)等待,無論條件如何,這個(gè)就是強(qiáng)制等待。 隱式等待(Implicit): 優(yōu)點(diǎn):全局設(shè)置,適用于整個(gè)測試用例,不需要在每個(gè)操作中都添加等待時(shí)間。 缺點(diǎn):只能等待元素可見或不可見,不能精確控制等待的條件和時(shí)間。如果頁面加載較慢,等待時(shí)間較長;如果頁面加載較快,可能會(huì)導(dǎo)致找不到元素而報(bào)錯(cuò)。 例子:比如你點(diǎn)了一道菜。告訴你這道菜需要15分鐘準(zhǔn)備好。你可以在這15分鐘內(nèi)做其他事情。如果菜在15分鐘內(nèi)準(zhǔn)備好了,你就可以立即享用。但如果菜需要更長的時(shí)間,你可以繼續(xù)等待。這就是隱式等待,你等待一段時(shí)間,但不需要一直關(guān)注等待的條件。 顯式等待(Explicit): 優(yōu)點(diǎn):可以根據(jù)具體的條件和時(shí)間來等待,非常靈活??梢缘却乜梢姟⒖牲c(diǎn)擊、存在、消失等多種條件。 缺點(diǎn):需要在每個(gè)等待的操作中明確指定條件和時(shí)間,相對(duì)來說稍微繁瑣一些。 例子:比如去機(jī)場接機(jī)。你知道飛機(jī)將在特定的時(shí)間降落,但你不知道具體什么時(shí)候。你可以使用手機(jī)上的APP獲得航班信息,從而獲取飛機(jī)的準(zhǔn)確位置和預(yù)計(jì)到達(dá)時(shí)間。你可以根據(jù)這些信息決定何時(shí)出發(fā)去接機(jī)。這就是顯式等待,你根據(jù)特定的條件和時(shí)間來等待,直到滿足條件后再執(zhí)行下一步操作。 3、跑一支任意程序,針對(duì)不同的等待,連續(xù)三次,紀(jì)錄時(shí)間,做成圖,并進(jìn)行分析 代碼思路:在Chrome瀏覽器中打開百度網(wǎng)站,并進(jìn)行四種不同的等待方法(循環(huán)方式)的測試。通過記錄開始時(shí)間和結(jié)束時(shí)間,計(jì)算出每種等待方法的耗時(shí),并保存在列表中。最后使用matplotlib模塊繪制出各種等待方法的耗時(shí)圖。 a.導(dǎo)入所需的庫
導(dǎo)入matplotlib模塊用于繪圖;導(dǎo)入selenium的webdriver模塊用于創(chuàng)建瀏覽器驅(qū)動(dòng);導(dǎo)入time模塊用于計(jì)時(shí);導(dǎo)入warnings模塊用于消除警告;通過matplotlib相關(guān)參數(shù)設(shè)置中文字體為SimHei,消除坐標(biāo)軸負(fù)號(hào)顯示問題。
b.創(chuàng)建瀏覽器驅(qū)動(dòng)
c.定義等待方法的時(shí)間列表和名稱列表
d.執(zhí)行搜索并記錄時(shí)間(循環(huán)4次(無等待、強(qiáng)制等待、隱含等待、明確等待))
e.關(guān)閉瀏覽器驅(qū)動(dòng)
f.通過matplotlib進(jìn)行繪圖
g.繪圖結(jié)果 1、等待時(shí)間為2秒
2、等待時(shí)間為30秒
3、等待時(shí)間為一分鐘(60秒)
4、實(shí)際范例演練https://www.webscrapingpro.tw/what-is-web-scraping/ 由于范例中的爬取的網(wǎng)站無法在國內(nèi)登錄,所以我選擇更改爬取的網(wǎng)址。 代碼思路:通過使用Python的requests庫來向特定URL發(fā)送HTTP請(qǐng)求,從網(wǎng)頁上獲取信息。然后,使用BeautifulSoup庫對(duì)HTML進(jìn)行解析,提取出所需的信息。最后,將提取到的信息按照CSV格式寫入到指定的文件中。 (1)導(dǎo)入所需的庫
(2)使用BeautifulSoup來解析網(wǎng)頁內(nèi)容
(3)找到最近更新小說列表的父元素和列表項(xiàng)
(4)創(chuàng)建csv文件并且寫入標(biāo)題行,遍歷每個(gè)小說的列表項(xiàng),提取信息并寫入CSV文件
(5)查看csv文件
五、實(shí)驗(yàn)結(jié)果 1、第一題結(jié)果截圖 a.強(qiáng)制等待運(yùn)行截圖
b.明確等待運(yùn)行截圖
c.隱含等待運(yùn)行截圖
2、第三題結(jié)果截圖 a.等待時(shí)間為2秒
b.等待時(shí)間為30秒
c.等待時(shí)間為一分鐘(60秒)
3、第四題結(jié)果截圖
六、實(shí)驗(yàn)總結(jié) 本次實(shí)驗(yàn)主要是通過實(shí)際的Python動(dòng)態(tài)網(wǎng)頁爬蟲的例子,來了解三種等待機(jī)制:強(qiáng)制等待、隱含等待和明確等待。在實(shí)驗(yàn)中,我們使用了selenium庫來模擬瀏覽器操作,以及time庫來實(shí)現(xiàn)等待功能。 在強(qiáng)制等待中,我們使用time庫的sleep方法來暫停程序的執(zhí)行,等待指定的時(shí)間。這種方法簡單直接,但是不靈活,等待時(shí)間固定,無法根據(jù)頁面加載情況來調(diào)整等待時(shí)間。 在隱含等待中,我們使用selenium庫的implicitly_wait方法來設(shè)置全局的等待時(shí)間,等待頁面加載完成。這種方法適用于整個(gè)測試用例,不需要在每個(gè)操作中都添加等待時(shí)間,但是只能等待元素可見或不可見,不能精確控制等待的條件和時(shí)間。 在明確等待中,我們使用selenium庫的WebDriverWait和expected_conditions方法來實(shí)現(xiàn)等待功能。這種方法可以根據(jù)具體的條件和時(shí)間來等待,非常靈活??梢缘却乜梢?、可點(diǎn)擊、存在、消失等多種條件,但是需要在每個(gè)等待的操作中明確指定條件和時(shí)間,相對(duì)來說稍微繁瑣一些。 通過比較三種等待機(jī)制的優(yōu)缺點(diǎn),我們可以得出以下結(jié)論: 強(qiáng)制等待(sleep):實(shí)現(xiàn)簡單,直接暫停程序執(zhí)行指定的時(shí)間,但是不靈活,等待時(shí)間固定,無法根據(jù)頁面加載情況來調(diào)整等待時(shí)間。 隱含等待(Implicit):全局設(shè)置,適用于整個(gè)測試用例,不需要在每個(gè)操作中都添加等待時(shí)間,但是只能等待元素可見或不可見,不能精確控制等待的條件和時(shí)間。 明確等待(Explicit):可以根據(jù)具體的條件和時(shí)間來等待,非常靈活,可以等待元素可見、可點(diǎn)擊、存在、消失等多種條件,但是需要在每個(gè)等待的操作中明確指定條件和時(shí)間,相對(duì)來說稍微繁瑣一些。 還有,通過跑一支任意程序,針對(duì)不同的等待機(jī)制連續(xù)三次,紀(jì)錄時(shí)間并繪制成圖,可以進(jìn)一步分析不同等待機(jī)制的性能差異。 最后,我們通過實(shí)例對(duì)于網(wǎng)頁進(jìn)行請(qǐng)求,然后抓取所需的內(nèi)容,最后存儲(chǔ)數(shù)據(jù)。
柚子快報(bào)邀請(qǐng)碼778899分享:爬蟲技術(shù)實(shí)驗(yàn)報(bào)告
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。