Python爬取动态数据
項目場景:
在做一個校園新聞小程序的時候,不僅需要獲得新聞內(nèi)容,同時還要獲取點擊量來排序。爬取靜態(tài)的數(shù)據(jù)很簡單,爬取動態(tài)的數(shù)據(jù)就有一點麻煩了。
問題描述
比如說我們在爬取這個網(wǎng)頁的時候
打開開發(fā)者工具可以看到點擊量
但是我們爬取來的內(nèi)容確是這個樣子的
點擊量為什么會不顯示呢?
原因分析:
我的理解是這樣子的,因為點擊量是隨著網(wǎng)頁的刷新要不斷地改變的,而新聞內(nèi)容是固定不變的。所以說點擊量會由一個函數(shù)去不斷更新,因此靜態(tài)的網(wǎng)頁內(nèi)容不顯示這個數(shù)據(jù)也在情理之中了。
解決方案:
要獲取這樣的數(shù)據(jù),首先得找到這個數(shù)據(jù)。幸運地是,點擊量這個數(shù)據(jù)比較的獨一無二,是一個數(shù)字。當然你不能直接打開開發(fā)者工具就在在”元素“中檢索,要找到產(chǎn)生這個數(shù)字的源頭,這種動態(tài)數(shù)據(jù)一般會在“網(wǎng)絡”中的XHR或者JS文件中找到,比如這樣(記得刷新一下再找!)
在這一個亂七八糟的返回里面,我們要的點擊量就在最后的幾個click中。當然它現(xiàn)在不再是那個781了,但沒有關系,我們很輕松地找到了它(大多數(shù)情況不是這樣,但readClick這幾個字實在是太顯眼了!)
預覽就是我們發(fā)送請求獲得的數(shù)據(jù),而點擊量就放在這個數(shù)據(jù)的最后。那么我們現(xiàn)在只需要發(fā)送請求獲得這個數(shù)據(jù),再用正則表達式提取出點擊量803就行了
然后是請求的參數(shù),這個參數(shù)有時候會在標頭的最下面,但是這里并沒有,其實負載就是這次請求的參數(shù)。
我們來分析一下參數(shù)。如果你只想獲得這一個網(wǎng)頁的動態(tài)數(shù)據(jù),那么直接照抄就行了。
我們來分析一下這些參數(shù)。c0-param0與page在不同的新聞是有區(qū)別的,區(qū)別就在于他們是第幾條新聞,參數(shù)就要怎么寫,比如這條新聞網(wǎng)址是https://news.hutb.edu.cn/column/h_26_yi/content/1649408845878.shtml,那么最后的169408845878就是這兩個參數(shù)的實參(可能這個數(shù)字也不是新聞 的條數(shù),畢竟太大了!)
然后就是scriptSessionId,這個參數(shù)我在比較不同的新聞頁時發(fā)現(xiàn)他們在’/‘之前的字符是相同的,不同的是’/‘后面的字符,于是我搜索了這個參數(shù)
我們來搜索一下’/'后面的參數(shù)
很明顯這個參數(shù)是由當前時間與一個隨機數(shù)決定的,而tokenify我認為是一個編碼的函數(shù),既然與隨機數(shù)有關,那么我在傳參時是不是可以忽略這個參數(shù),隨便寫一個值呢,我們試一下:
結果是這樣子
因此在爬取網(wǎng)頁動態(tài)數(shù)據(jù)的時候,首先是找到這個值(因為有搜索選項,大部分時候都很容易找),然后就是參數(shù),或者說負載的問題了。如果你要爬取多個頁面的動態(tài)數(shù)據(jù),那么將這些參數(shù)的意義,或者說他們的特征弄清楚則是很重要的,這樣才能傳正確的參數(shù)獲得自己想要的數(shù)據(jù)。
總結
以上是生活随笔為你收集整理的Python爬取动态数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模型稳定度指标PSI与IV
- 下一篇: 点屏注意事项