歡迎光臨
每天分享高質量文章

Python 爬取CSDN的極客頭條

這兩周花了點時間讀了《Python網路資料採集》,內容不多,不到200頁,但是非常豐富,有入門,有提高,有註意事項,有經驗之談,有原理,有分析,讀完受益匪淺。書中講了很多反爬蟲、圖片驗證碼之類的東西,不過感謝csdn的開放性,這些都沒有。所以第一個練習,就是爬取csdn的極客頭條的更新文章。

1、思路

思路比較簡單,首先是登入,然後爬取頁面的更新文章名稱和連結。要註意的一點是,極客頭條的串列掃清是動態的,只有頁面有捲軸並且往下拉的時候,才會載入新的文章串列。我用豎屏顯示器試了下,沒有捲軸的情況下,預設顯示20條的文章串列,結果不能載入新的文章串列,應該算是bug。

2、準備

透過瀏覽器的開發人員工具抓包,可以發現極客頭條申請新串列的時候URL格式如下:

http://geek.csdn.net/service/news/get_news_list?jsonpcallback=jQuery203014439105321047596_1516862462757&username;=[賬戶名]&from;=-&size;=20&type;=hackernewsv2_new&_=1516862462758

請求引數:

jsonpcallback:

jQuery20302827217349787545_1516863701413 #該引數是jQuery框架自動生成的匿名回呼函式的函式名,用於ajax獲取資料時的資料處理,看網頁原始碼,應該是利用getJSON,所以是頁面端生成的引數,可以隨意填寫

username: [賬戶名]

from:

6:252765 #這個引數代表的是下一次請求文章串列時,文章的起始編號,如果是第一次請求串列,則這裡填‘-’(短槓),和上面例子中一樣,下次編號會在本次請求傳回的JSON資料中攜帶

size:

20 #本次請求的文章條目數,我試過1000都成功了。。。

type:

hackernewsv2_new #文章型別,型別在首頁的“最熱 最新 業界”等等那一行小標題,選擇的分類不同,這個引數不同,具體抓包可見

_:

1516863701415 #沒什麼用,就是第一個引數下短槓後面的數字累加,實際測試沒有也可以

透過查詢資料和抓包,發現csdn的登入還是很簡單的,只要使用者名稱密碼,不需要驗證碼等等,抓包可以看到請求引數:

gps:

39.890503,116.431339

username:

[賬戶名]

password:

[密碼] #抓包的話這裡是明碼,發出去的話應該是加密的

rememberMe:

true #是否記住密碼

lt:

LT-448149-vgNusKFi3i7wBRIZUrzCFLDfoDVP34 #這個引數是在登入主頁面中的,需要自己解析出來,數值隨機,每次登入需要獲取

execution:

e3s1 #目前是固定值,和網文對比這個值不同,所以還是每次登入獲取的好

_eventId:

submit #固定值,就是代表提交


登入時要註意的是,csdn為了防爬蟲,要求HTTP頭的User-Agent欄位必須是真實的,所以我用了抓包裡面真實的瀏覽器填充的欄位,否則會一直登入失敗,傳回登入頁。

透過抓包可以看到,請求文章後,傳回的是json資料,其中‘from’自動用於下次請求,‘html’欄位就是傳回的網頁,utf-8編碼的Unicode字串,Python預設用的就是Unicode,所以取出html欄位的資料後自動轉為了漢字、符號等,然後解析其中的class型別為‘title’的連結,就可以獲得文章連結和名稱。

3、程式碼(非常短)

來源:blwinner

連結:http://blog.csdn.net/blwinner/article/details/79161907


《Python人工智慧和全棧開發》2018年07月23日即將在北京開課,120天衝擊Python年薪30萬,改變速約~~~~


*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。

– END –




更多Python好文請點選【閱讀原文】哦

↓↓↓

贊(0)

分享創造快樂