爬蟲學習3 Python爬取動態頁面思路(一)

2021-08-09 09:52:51 字數 2277 閱讀 8790

chrome瀏覽器

果殼網-科學人 頁面

**1.進入果殼網-科學人分頁

2.f12開啟「審查元素」選則network窗格並重新整理頁面以抓包

3.在頁面上滑動滑鼠滾輪使頁面向下

此時可以看到頁面是動態載入的

相應的在監控視窗可以看到有資料收發(下圖紅圈處)

所以非同步傳輸資料必然是在此時發生的

4.雙擊上圖紅圈處,可以篩選出在此時變動的資料報

5雙擊資料報,右側展開包的相關資訊

可以發現是get方式傳輸的json資訊(實際上這也是ajax非同步載入的特點)

6.將包的相關資訊切換到preview選項卡

我們可以看到chrome已經很直觀的為我們將json資訊格式化顯示了

json中包含五個鍵值對分別是limit now offset ok 以及乙個json陣列result

條目資訊就在result中

到這裡,我們就找到非同步載入的資料在哪了

但是你肯定會問,那怎麼不斷的爬取非同步資料呢?這就是下一點了

第一種方法:

我們分析包的url以及包的內容

=1508143436759」>

url裡面limit=20

而result中也是20條資料

咦?好像有點聯絡

嘗試修改limit值為30直接開啟url發現有效,於是可以以limit來構建爬蟲

第二種方法:

繼續向下滑動頁面,使頁面再ajax載入一次,對比兩次包url

=1508143436759」>

=1508143436760」>

發現改變的是offset,並且差值是20正是條目的數目

即offset就是條目數

於是可以以offset來構建爬蟲

因為獲取的是json資料所以這裡嘗試通過json模組來獲取所需內容

採用第一二種方法結合:將limit設定為1,offset+1遞增的方式構建

幾個要點:

1.利用pprint幫助觀察result中資料

2.儲存為檔案時 open函式中加入encoding=utf-8,否則儲存資料中文亂碼

with open('result.txt', 'a',  encoding='utf-8') as fo:

fo.write(str(items)+'\n')

3.核心**

def

get_datas

(offset):

'''從頁面中獲取資料'''

items = {}

url = '' + str(offset) + '&_=1508134471173'

html = get_page(url)

#datas = json.loads(html.text)

#pprint.pprint(datas['result'])

datas = json.loads(html.text)['result'][0]

items['type'] = datas['author']['nickname']

items['keyword'] = datas['subject']['name']

items['title'] = datas['title']

items['summary'] = datas['summary']

#pprint.pprint(items)

with open('result.txt', 'a', encoding='utf-8') as fo:

fo.write(str(items)+'\n')

結果如下:

python爬蟲學習 爬取網頁中的動態資料

在之前的爬蟲豆瓣電影top250學習中,爬取的內容都直接在網頁原始碼中,而實際上很多資料都是在網頁中實時ajax請求,並不會顯示在源 中 例如豆瓣電影分類排行榜 動作片為例,開啟f12,選擇network xhr,當向下滑動網頁時,我們可以看到新的檔案出現 通過鏈結 我們大體可以猜測出start與l...

Python 爬蟲爬取網頁

工具 python 2.7 import urllib import urllib2 defgetpage url 爬去網頁的方法 request urllib.request url 訪問網頁 reponse urllib2.urlopen request 返回網頁 return response...

python爬蟲爬取策略

在爬蟲系統中,待抓取url佇列是很重要的一部分。待抓取url佇列中的url以什麼樣的順序排列也是乙個很重要的問題,因為這涉及到先抓取那個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面重點介紹幾種常見的抓取策略 一 深度優先遍歷策略 深度優先遍歷策略是指網路爬蟲會從起始頁開始...