這兩周花了點時間讀了《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好文請點選【閱讀原文】哦
↓↓↓