使用pipi install Requests-HTML來安裝就像其他Reitz庫壹樣容易和簡單:
這個庫是在requests庫上實現的,R得到的結果是Response對象下的壹個子類,有多個html屬性。所以這個R可以做請求庫的響應對象可以做的任何事情。如果需要解析網頁,直接獲取響應對象的html屬性:
我必須崇拜上帝瑞茲。他很擅長組裝。實際上,HTMLSession繼承了請求的核心類。會話,然後重寫請求中的請求方法。會話類返回它自己的HTMLResponse對象之壹。此類繼承自請求。響應,但添加了_from_response方法來構造實例:
之後在htmlResponse中定義屬性方法html,可以通過HTML屬性訪問。實現就是組裝PyQuery。大部分核心解析類也使用PyQuery和lxml進行解析,簡化了名字,相當討人喜歡。
有兩種定位元素的方法:
方法名很簡單,符合Python優雅的風格。在這裏,我們不妨簡單解釋壹下這兩種方法:
定位元素後,需要獲取元素中的內容和屬性相關數據,並獲取文本:
獲取元素的屬性:
還可以通過模式匹配相應的內容:
這個功能看起來像雞肋,可以進壹步研究優化,說不定還能在github上提交。
除了壹些基本的操作,這個庫還提供了壹些人性化的操作。例如,壹鍵訪問網頁上的所有超鏈接對於整個爬蟲來說應該是壹個福音,URL管理更加方便:
內容頁壹般都是分頁的,壹次抓不了太多。該庫可以獲取分頁信息:
結果如下:
通過叠代器,實現智能發現分頁。在這個叠代器中,將使用壹個名為_next的方法,並發布壹段源代碼。
通過查找A標簽是否包含指定文本來判斷是否有下壹頁,通常我們的下壹頁會被下壹頁引導或者加載更多,他用這個標誌來判斷。默認情況下,有壹個全局列表:['下壹個','更多','舊']。我個人認為這種方法非常不靈活,很難擴展。感興趣的可以向github提交代碼優化。
也許現在考慮到js的壹些異步加載,這個庫支持js運行時。官方解釋如下:
使用起來非常簡單,直接調用以下方法:
第壹次用的時候會下載Chromium,但是在中國,妳懂的,自己想辦法下載,不要等它自己下載。render函數可以使用js腳本操作頁面,滾動操作單獨帶參數。這對於上拉加載等新頁面非常友好。