Python爬取动态数据
項(xiàng)目場(chǎng)景:
在做一個(gè)校園新聞小程序的時(shí)候,不僅需要獲得新聞內(nèi)容,同時(shí)還要獲取點(diǎn)擊量來排序。爬取靜態(tài)的數(shù)據(jù)很簡(jiǎn)單,爬取動(dòng)態(tài)的數(shù)據(jù)就有一點(diǎn)麻煩了。
問題描述
比如說我們?cè)谂廊∵@個(gè)網(wǎng)頁(yè)的時(shí)候
打開開發(fā)者工具可以看到點(diǎn)擊量
但是我們爬取來的內(nèi)容確是這個(gè)樣子的
點(diǎn)擊量為什么會(huì)不顯示呢?
原因分析:
我的理解是這樣子的,因?yàn)辄c(diǎn)擊量是隨著網(wǎng)頁(yè)的刷新要不斷地改變的,而新聞內(nèi)容是固定不變的。所以說點(diǎn)擊量會(huì)由一個(gè)函數(shù)去不斷更新,因此靜態(tài)的網(wǎng)頁(yè)內(nèi)容不顯示這個(gè)數(shù)據(jù)也在情理之中了。
解決方案:
要獲取這樣的數(shù)據(jù),首先得找到這個(gè)數(shù)據(jù)。幸運(yùn)地是,點(diǎn)擊量這個(gè)數(shù)據(jù)比較的獨(dú)一無(wú)二,是一個(gè)數(shù)字。當(dāng)然你不能直接打開開發(fā)者工具就在在”元素“中檢索,要找到產(chǎn)生這個(gè)數(shù)字的源頭,這種動(dòng)態(tài)數(shù)據(jù)一般會(huì)在“網(wǎng)絡(luò)”中的XHR或者JS文件中找到,比如這樣(記得刷新一下再找!)
在這一個(gè)亂七八糟的返回里面,我們要的點(diǎn)擊量就在最后的幾個(gè)click中。當(dāng)然它現(xiàn)在不再是那個(gè)781了,但沒有關(guān)系,我們很輕松地找到了它(大多數(shù)情況不是這樣,但readClick這幾個(gè)字實(shí)在是太顯眼了!)
預(yù)覽就是我們發(fā)送請(qǐng)求獲得的數(shù)據(jù),而點(diǎn)擊量就放在這個(gè)數(shù)據(jù)的最后。那么我們現(xiàn)在只需要發(fā)送請(qǐng)求獲得這個(gè)數(shù)據(jù),再用正則表達(dá)式提取出點(diǎn)擊量803就行了
然后是請(qǐng)求的參數(shù),這個(gè)參數(shù)有時(shí)候會(huì)在標(biāo)頭的最下面,但是這里并沒有,其實(shí)負(fù)載就是這次請(qǐng)求的參數(shù)。
我們來分析一下參數(shù)。如果你只想獲得這一個(gè)網(wǎng)頁(yè)的動(dò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就是這兩個(gè)參數(shù)的實(shí)參(可能這個(gè)數(shù)字也不是新聞 的條數(shù),畢竟太大了!)
然后就是scriptSessionId,這個(gè)參數(shù)我在比較不同的新聞頁(yè)時(shí)發(fā)現(xiàn)他們?cè)凇?‘之前的字符是相同的,不同的是’/‘后面的字符,于是我搜索了這個(gè)參數(shù)
我們來搜索一下’/'后面的參數(shù)
很明顯這個(gè)參數(shù)是由當(dāng)前時(shí)間與一個(gè)隨機(jī)數(shù)決定的,而tokenify我認(rèn)為是一個(gè)編碼的函數(shù),既然與隨機(jī)數(shù)有關(guān),那么我在傳參時(shí)是不是可以忽略這個(gè)參數(shù),隨便寫一個(gè)值呢,我們?cè)囈幌?#xff1a;
結(jié)果是這樣子
因此在爬取網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)的時(shí)候,首先是找到這個(gè)值(因?yàn)橛兴阉鬟x項(xiàng),大部分時(shí)候都很容易找),然后就是參數(shù),或者說負(fù)載的問題了。如果你要爬取多個(gè)頁(yè)面的動(dòng)態(tài)數(shù)據(jù),那么將這些參數(shù)的意義,或者說他們的特征弄清楚則是很重要的,這樣才能傳正確的參數(shù)獲得自己想要的數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的Python爬取动态数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模型稳定度指标PSI与IV
- 下一篇: Python 词云分析周杰伦新歌《说好不