本人前端狗一名,也想追隨人工智能的道路肮帐,于是在java、php边器、python的選擇中徘徊训枢,因?yàn)樯磉卝ava和php的coder太多了,于是乎選擇了python忘巧,學(xué)習(xí)python第二天發(fā)文恒界;
因?yàn)槲沂乔岸耍瑢W(xué)習(xí)python基本算是毫無基礎(chǔ)砚嘴,習(xí)慣性摟一遍runoob十酣,籠統(tǒng)過度涩拙,只是有印象,方便后期查找耸采,基本的了解了之后兴泥,開始爬!洋幻!
python比較好的一點(diǎn)就是有非常強(qiáng)大且數(shù)量夠多的庫郁轻,所以大多數(shù)時候你只需要會用輪子而不需要造輪子;
我今天選擇爬的網(wǎng)站是掘金:https://juejin.im,首頁的最新隨機(jī)文章
第一步:查看頁面的渲染方式:
? ? 首先要確定你要爬的網(wǎng)站是如何進(jìn)行前端渲染的文留,我用的方式比較簡單好唯,用chrome打開目標(biāo)網(wǎng)站,在頁面中右鍵-》查看網(wǎng)頁源代碼燥翅,如果從源代碼中能看到網(wǎng)站上所有的數(shù)據(jù)骑篙,就代表你可以使用傳統(tǒng)的爬蟲方式,反之則需要使用ajax的方式爬,如下圖
PS:安全性的問題,我不太情書猖毫,但是從我現(xiàn)在掌握的技術(shù)來看台谍,對于ajax方式的爬蟲技術(shù)稍稍復(fù)雜一點(diǎn)點(diǎn)
第二步:查找數(shù)據(jù)接口
? ? 已經(jīng)確認(rèn)目標(biāo)網(wǎng)站的渲染方式,那么現(xiàn)在需要找到傳輸數(shù)據(jù)的接口吁断,通常這類接口是都會暴露的趁蕊,因?yàn)榘踩詥栴},訪問接口的時候可能會有header的驗(yàn)證仔役,因?yàn)槲覀冎皇遣榭磾?shù)據(jù)掷伙,并不存在ddos攻擊或者其他的不法行為,所以又兵,用自己瀏覽器真實(shí)的參數(shù)就可以
? ? 先來找接口任柜,chrome打開目標(biāo)網(wǎng)站,F(xiàn)12->network->刷新頁面沛厨,不出意外的話你會看到如下界面
然后選擇XHR乘盼,為什么選xhr不做過多的解析google、百度即可俄烁,這是ajax的一種方法,選擇xhr后數(shù)據(jù)量會小很多
這里發(fā)現(xiàn)的基本都是需要請求返回的數(shù)據(jù)接口级野,我的習(xí)慣是先看大的页屠,為什么呢(因?yàn)槲壹夹g(shù)LOW啊粹胯,哈哈),不行就每個都點(diǎn)一次辰企,總會發(fā)現(xiàn)的风纠,哈哈
因?yàn)槲覀円磾?shù)據(jù)所以這里選擇Preview牢贸,如圖
因?yàn)榫蚪鹗菨L動加載竹观,所以我們繼續(xù)向下滾動,對比一下每次加載數(shù)據(jù)的變化(這里為爬多數(shù)據(jù)準(zhǔn)備潜索,因?yàn)榫蚪鹗醉撁看沃患虞d10條數(shù)據(jù))
因?yàn)槲覍Ρ冗^,就不發(fā)圖了竹习,每次請求的接口數(shù)據(jù)都一樣誊抛,沒有區(qū)別,就代表這整陌,用戶每次向下滑動頁面請求的都是這個接口拗窃,但是返回的數(shù)據(jù)是不同的,這個應(yīng)該是掘金后臺進(jìn)行的處理泌辫,咱們不需要管随夸,換言之如果要獲得更多的數(shù)據(jù),多請求幾次這個接口就可以了(切記是掘金首頁的數(shù)據(jù)震放,因?yàn)槠渌麢谀康姆绞胶褪醉摬灰粯?
接下來我們要查看具體的接口是什么宾毒?所需參數(shù)都有啥?
選擇Headers標(biāo)簽
這里的數(shù)據(jù)大多數(shù)同學(xué)應(yīng)該能看明白
Request_url:請求的接口地址澜搅,這里是帶參數(shù)的
Request Method:請求方式
Host:Host地址
Referer:觸發(fā)接口的路由地址
User-Agent:瀏覽器信息
Query String Parameters :請求的數(shù)據(jù)
? ? sudi伍俘,ab, src 在Url中可以看到這些數(shù)據(jù)
以上就是我們需要的數(shù)據(jù)勉躺,數(shù)據(jù)請求的接口地址為:https://recommender-api-ms.juejin.im/v1/get_recommended_entry? 癌瘾,現(xiàn)在我們基本分析完了,可以寫代碼啦
第三步:在python中實(shí)現(xiàn)功能
直接上代碼
到此饵溅,爬完結(jié)束妨退!