這兩周花了點(diǎn)時(shí)間讀了《Python網(wǎng)絡(luò)數(shù)據(jù)采集》,內(nèi)容不多,不到200頁,但是非常豐富,有入門,有提高,有注意事項(xiàng),有經(jīng)驗(yàn)之談,有原理,有分析,讀完受益匪淺。書中講了很多反爬蟲、圖片驗(yàn)證碼之類的東西,不過感謝csdn的開放性,這些都沒有。所以第一個(gè)練習(xí),就是爬取csdn的極客頭條的更新文章。
1、思路
思路比較簡單,首先是登錄,然后爬取頁面的更新文章名稱和鏈接。要注意的一點(diǎn)是,極客頭條的列表刷新是動(dòng)態(tài)的,只有頁面有滾動(dòng)條并且往下拉的時(shí)候,才會(huì)加載新的文章列表。我用豎屏顯示器試了下,沒有滾動(dòng)條的情況下,默認(rèn)顯示20條的文章列表,結(jié)果不能加載新的文章列表,應(yīng)該算是bug。
2、準(zhǔn)備
通過瀏覽器的開發(fā)人員工具抓包,可以發(fā)現(xiàn)極客頭條申請新列表的時(shí)候URL格式如下:
http://geek.csdn.net/service/news/get_news_list?jsonpcallback=jQuery203014439105321047596_1516862462757&username=[賬戶名]&from=-&size=20&type=hackernewsv2_new&_=1516862462758
請求參數(shù):
jsonpcallback:
jQuery20302827217349787545_1516863701413 #該參數(shù)是jQuery框架自動(dòng)生成的匿名回調(diào)函數(shù)的函數(shù)名,用于ajax獲取數(shù)據(jù)時(shí)的數(shù)據(jù)處理,看網(wǎng)頁源代碼,應(yīng)該是利用getJSON,所以是頁面端生成的參數(shù),可以隨意填寫
username: [賬戶名]
from:
6:252765 #這個(gè)參數(shù)代表的是下一次請求文章列表時(shí),文章的起始編號,如果是第一次請求列表,則這里填‘-’(短杠),和上面例子中一樣,下次編號會(huì)在本次請求返回的JSON數(shù)據(jù)中攜帶
size:
20 #本次請求的文章條目數(shù),我試過1000都成功了。。。
type:
hackernewsv2_new #文章類型,類型在首頁的“最熱 最新 業(yè)界”等等那一行小標(biāo)題,選擇的分類不同,這個(gè)參數(shù)不同,具體抓包可見
_:
1516863701415 #沒什么用,就是第一個(gè)參數(shù)下短杠后面的數(shù)字累加,實(shí)際測試沒有也可以
通過查找資料和抓包,發(fā)現(xiàn)csdn的登錄還是很簡單的,只要用戶名密碼,不需要驗(yàn)證碼等等,抓包可以看到請求參數(shù):
gps:
39.890503,116.431339
username:
[賬戶名]
password:
[密碼] #抓包的話這里是明碼,發(fā)出去的話應(yīng)該是加密的
rememberMe:
true #是否記住密碼
lt:
LT-448149-vgNusKFi3i7wBRIZUrzCFLDfoDVP34 #這個(gè)參數(shù)是在登錄主頁面中的,需要自己解析出來,數(shù)值隨機(jī),每次登錄需要獲取
execution:
e3s1 #目前是固定值,和網(wǎng)文對比這個(gè)值不同,所以還是每次登錄獲取的好
_eventId:
submit #固定值,就是代表提交
登錄時(shí)要注意的是,csdn為了防爬蟲,要求HTTP頭的User-Agent字段必須是真實(shí)的,所以我用了抓包里面真實(shí)的瀏覽器填充的字段,否則會(huì)一直登錄失敗,返回登錄頁。
通過抓包可以看到,請求文章后,返回的是json數(shù)據(jù),其中‘from’自動(dòng)用于下次請求,‘html’字段就是返回的網(wǎng)頁,utf-8編碼的Unicode字符串,Python默認(rèn)用的就是Unicode,所以取出html字段的數(shù)據(jù)后自動(dòng)轉(zhuǎn)為了漢字、符號等,然后解析其中的class類型為‘title’的鏈接,就可以獲得文章鏈接和名稱。
3、代碼(非常短)
-
python
+關(guān)注
關(guān)注
55文章
4767瀏覽量
84375 -
csdn
+關(guān)注
關(guān)注
2文章
16瀏覽量
6837
原文標(biāo)題:Python 爬取CSDN的極客頭條
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論