使用Python3的urllib庫爬取Ajax加載的頁面實(shí)例
在這個(gè)示例中,我們將使用Python3的urllib庫來爬取一個(gè)使用Ajax加載內(nèi)容的網(wǎng)頁。首先,我們需要查看要爬取的頁面,比如豆瓣電影的分類頁地址:。 打開Python開發(fā)工具IDLE并編寫代碼
在這個(gè)示例中,我們將使用Python3的urllib庫來爬取一個(gè)使用Ajax加載內(nèi)容的網(wǎng)頁。首先,我們需要查看要爬取的頁面,比如豆瓣電影的分類頁地址:。
打開Python開發(fā)工具IDLE并編寫代碼
首先,我們需要打開Python開發(fā)工具IDLE,并新建一個(gè)名為''的文件,然后在其中編寫以下代碼:
import
url ''
headers {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
'Referer': '',
'Connection': 'keep-alive'
}
req (url, headersheaders)
res (req)
content ().decode('utf8')
print(content)
在代碼中,我們首先定義了要爬取的網(wǎng)頁的URL和請(qǐng)求頭信息。然后,我們創(chuàng)建一個(gè)urllib的Request對(duì)象,并使用該對(duì)象發(fā)送請(qǐng)求獲取網(wǎng)頁內(nèi)容。最后,我們將獲取到的內(nèi)容打印出來。
運(yùn)行代碼并觀察網(wǎng)頁加載情況
現(xiàn)在,我們可以運(yùn)行代碼,并觀察是否成功打印出網(wǎng)頁的內(nèi)容。如果一切順利,你應(yīng)該能夠看到豆瓣電影分類頁的HTML代碼。
使用開發(fā)者模式觀察Ajax請(qǐng)求參數(shù)
接下來,我們需要使用瀏覽器的開發(fā)者模式來觀察Ajax請(qǐng)求發(fā)送的數(shù)據(jù)參數(shù)。打開開發(fā)者模式的方法是按下F12鍵,在Network標(biāo)簽下可以看到發(fā)送的請(qǐng)求數(shù)據(jù)。
觀察請(qǐng)求URL參數(shù)和返回值
觀察發(fā)現(xiàn),每次點(diǎn)擊“加載更多”按鈕時(shí),發(fā)送的請(qǐng)求URL中的start參數(shù)會(huì)遞增,步進(jìn)為20。例如,請(qǐng)求URL可能是_search_subjects?sortUamp;range0,10amp;tagsamp;start0,下一次請(qǐng)求的URL可能是_search_subjects?sortUamp;range0,10amp;tagsamp;start20。
修改代碼以打印電影名稱
根據(jù)觀察到的請(qǐng)求參數(shù)和返回值,我們可以修改代碼來打印出電影的名稱。下面是修改后的代碼:
import
import json
url '_search_subjects?sortUamp;range0,10amp;tagsamp;start0'
headers {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
'Referer': '',
'Connection': 'keep-alive'
}
req (url, headersheaders)
res (req)
content ().decode('utf8')
dcontent json.loads(content)
for item in dcontent['data']:
print(item['title'])
在修改后的代碼中,我們首先更新了要爬取的URL,使其包含了正確的請(qǐng)求參數(shù)。然后,我們解析返回的json格式字符串,并遍歷打印出電影的名稱。
現(xiàn)在,再次運(yùn)行代碼,你應(yīng)該能夠看到多次請(qǐng)求返回的電影名稱。