0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python 爬取CSDN的極客頭條

馬哥Linux運(yùn)維 ? 來源:未知 ? 作者:鄧佳佳 ? 2018-03-21 14:58 ? 次閱讀

這兩周花了點(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、代碼(非常短)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    python實(shí)現(xiàn)網(wǎng)頁爬蟲圖片

    來實(shí)現(xiàn)這樣一個(gè)簡單的爬蟲功能,把我們想要的代碼取到本地,功能有點(diǎn)類似我們之前學(xué)過的批處理。下面就看看如何使用python來實(shí)現(xiàn)這樣一個(gè)功能,主要分為三步,如下:一. 獲取整個(gè)頁面數(shù)據(jù)首先我們可以先
    發(fā)表于 04-05 15:32

    python

    python學(xué)習(xí)1.數(shù)據(jù)2.圖片
    發(fā)表于 09-21 18:18

    采用xpath網(wǎng)站內(nèi)容

    xpathmooc網(wǎng)課程
    發(fā)表于 04-11 12:01

    基于Python3對攜程網(wǎng)頁上北京五星級酒店列表的

    Python3 攜程網(wǎng)[1] 根據(jù)好評優(yōu)先順序,獲取北京五星級酒店列表
    發(fā)表于 04-19 16:25

    基于Python實(shí)現(xiàn)一只小爬蟲拉勾網(wǎng)職位信息的方法

    通俗易懂的分析如何用Python實(shí)現(xiàn)一只小爬蟲,拉勾網(wǎng)的職位信息
    發(fā)表于 05-17 06:54

    python音頻文件的步驟

    python爬蟲音頻文件
    發(fā)表于 08-22 14:23

    Python豆瓣電影信息和存儲(chǔ)數(shù)據(jù)庫

    Python——豆瓣電影信息并存儲(chǔ)數(shù)據(jù)庫
    發(fā)表于 03-11 11:19

    百度92年程序員因“篡改數(shù)據(jù)”被抓

    百度92年程序員因“篡改數(shù)據(jù)”被抓—— 技術(shù)人員的新聞圈!CSDN 的讀者朋友們早上好哇,「頭條」來啦,快來看今天都有哪些值得我們技術(shù)人關(guān)注的重要新聞吧。整理 | 張紅月出品 |
    發(fā)表于 07-28 07:04

    python基礎(chǔ)語法及流程控制

    爬蟲復(fù)習(xí)1.python基礎(chǔ)python基礎(chǔ)語法 流程控制 函數(shù)封裝2.防措施整體防User-AgentrefererIP代理池Cookie代理池 各自防
    發(fā)表于 08-31 07:41

    豆瓣電影Top250信息

    通過本案例[豆瓣電影Top250信息]鍛煉除正則表達(dá)式之外兩種信息解析方式:Xpath和PyQuery。url地址:https://movie.douban.com/top25
    發(fā)表于 03-23 15:47

    Python如何實(shí)時(shí)變化的WebSocket數(shù)據(jù)

    Python 中的網(wǎng)絡(luò)請求庫非常多,Requests 是最常用的請求庫之一,它可以模擬發(fā)送網(wǎng)絡(luò)請求。但是這些請求都是基于 HTTP 協(xié)議的。在面對 WebSocket 的時(shí)候 Requests 就發(fā)揮不料作用了,必須使用能夠連接 WebSocket 的庫。
    的頭像 發(fā)表于 03-11 09:31 ?3524次閱讀
    <b class='flag-5'>Python</b>如何<b class='flag-5'>爬</b><b class='flag-5'>取</b>實(shí)時(shí)變化的WebSocket數(shù)據(jù)

    如何安裝第三方模塊4K壁紙

    如何安裝第三方模塊4K壁紙
    發(fā)表于 12-27 10:39 ?0次下載

    華為發(fā)布麒麟 990 芯片;蘋果召回部分電源插頭轉(zhuǎn)換器;KDevelop 5.4.2 發(fā)布? | 頭條...

    快來收聽頭條音頻版吧,智能播報(bào)由標(biāo)貝科技提供技術(shù)支持。「CSDN
    發(fā)表于 01-11 13:24 ?3次下載
    華為發(fā)布麒麟 990 芯片;蘋果召回部分電源插頭轉(zhuǎn)換器;KDevelop 5.4.2 發(fā)布? | <b class='flag-5'>極</b><b class='flag-5'>客</b><b class='flag-5'>頭條</b>...

    如何用python抖音app數(shù)據(jù)

    記錄一下如何用pythonapp數(shù)據(jù),本文以抖音視頻app為例。
    的頭像 發(fā)表于 03-16 09:07 ?5239次閱讀

    Scrapy怎么Python文件

    我們介紹了Scrapy框架運(yùn)行基本原理,緊接著我們介紹了如何利用Scrapy文本數(shù)據(jù)
    的頭像 發(fā)表于 02-24 15:16 ?546次閱讀
    Scrapy怎么<b class='flag-5'>爬</b><b class='flag-5'>取</b><b class='flag-5'>Python</b>文件