以Webdriver實例瞭解Webdriver

Webdriver是一個自動化測試軟件,也是處理Ajax渲染之一的爬蟲工具。web

本文以一個實際案例(今日頭條的陽光寬頻(365yg.com))來了解它有什麼做用,它能作什麼。相關的爬取思路也可應用在其餘相相似的網站。ajax

 

分析思路瀏覽器

第1步:首先進入https://365yg.com肯定爬取的目標,本例爬取視頻的下載連接視頻標題做者網絡

 

第2步:單擊鼠標右鍵選擇檢查或按鍵盤F12調出谷歌瀏覽器抓包工具進行分析併發

屢次查看不一樣的視頻內容發現它們的視頻超連接視頻標題做者的網頁結構徹底同樣,沒有反爬點,無需其餘的處理ide

第3步:單擊鼠標右鍵選擇查看網頁源代碼查看是否被Ajax渲染工具

3.1從搜索結果上看該網頁頗有可能已被Ajax渲染,可是仔細看發現下面這個區域有些關鍵字與咱們須要的內容很類似,並且相關內容帶有\u****等字樣,有多是將返回的中文轉化爲Unicode!!測試

3.2複製部份內容進行驗證後發現儘管標題的內容與咱們查找的標題不同,但可肯定的是首頁沒有被Ajax渲染,請求返回的視頻標題、做者等信息會動態改變網站

第4步:截止目前已解決爬取視頻標題和做者、接下來着手視頻的下載連接,接下來主要重複上面第一、第二、第3步url

在瀏覽器中複製第2步獲取到的a標籤的連接並進入,使用與第2步相同的方式調取谷歌瀏覽器抓包工具進行分析,複製video標籤中的src屬性值的連接http://v3-default.ixigua.com/b4163b403a3374cbd32c3493907d4f79/5cfcf33b/video/m/並用瀏覽器打開

如圖所示視頻已加載出來,也就是說這個連接就是咱們要找的視頻下載連接!!

第5步:別高興得太早,仔細想一下頭條的反爬就這麼容易被攻破嗎?以第3步相同的方式查看該網頁的網頁源代碼,並在頁面查找video標籤中的src屬性值的連接http://v3-default.ixigua.com/b4163b403a3374cbd32c3493907d4f79/5cfcf33b/video/m/, 並無查找到內容,並且也無帶有\u****等字樣相關內容。

經Ajax渲染後的網頁代碼與網頁源代碼對比發現,網頁源代碼中缺乏了視頻下載連接相關的內容,所以可肯定這網頁是帶有Ajax渲染的。

由於咱們使用requests或webdriver等獲取回來的網頁代碼就是網頁源代碼中相關的內容,若是咱們直接使用webdriver進行解析標籤就會提示沒有找到該標籤,使用Xpath、BeautifulSoup或Re進行解析也是相似的結果

第6步:難道就沒有解決辦法嗎?上文有說起webdriver是處理Ajax渲染之一的爬蟲工具,那若是能控制webdriver像瀏覽器那樣等候ajax渲染後再獲取該網頁代碼不就能夠獲取video標籤中的src屬性值的視頻下載連接了嗎?

沒錯,強大的webdriver提供了一個WebDriverWait方法提供多種顯式等候方法,調用相關方法就能控制webdriver進行不一樣條件的等候。

 

代碼實現思路

1.建立爬蟲類以及導入須要使用的包 -> 2.發送網絡請求並獲取首頁全部的視頻的連接、視頻標題和做者 -> 3.遍歷每一個視頻播放連接併發送網絡請求 -> 4.進行延時等候直至視頻標籤加載出來 -> 5.解析視頻標籤獲取真實的視頻下載連接 -> 6.保存爬取的視頻連接等詳情

 

第1步:建立爬蟲類以及導入須要使用的包 ->

 在爬蟲類的__init__方法中添加初始化url、User-Agent及建立webdriver對象

 第2步:發送網絡請求並獲取首頁全部的視頻的連接、視頻標題和做者 ->

第3步:進行延時等候直至視頻標籤加載出來 -> 解析視頻標籤獲取真實的視頻下載連接 ->

第4步:保存爬取的視頻連接等詳情

第5步:將全部的方法封裝到start()方法,並調用start()方法運行爬蟲

 

查看運行結果

打開代碼運行後生成的csv文件,複製real_url列任意的url並在瀏覽器中打開

成功加載出視頻!!說明已經過代碼成功驗證爬取構思是正確的。

 

結果回顧

經過以上的代碼已能成功爬取陽光寬頻(365yg.com)的視頻,但僅有7個結果,並且爬取的real_url列的連接是有時效性,過一段時間就不能再訪問,如何爬取更多視頻(破解下滑加載視頻)、如何更高效地爬取視頻(爬得更多、更快)等就須要運用更多複雜的知識點、添加到上面的代碼來實現功能。

相關文章
相關標籤/搜索