每天30分鐘,一起來學習爬蟲——day4(urllib庫——Ajax 實例:豆瓣電影,KFC餐廳地址)

Ajax 數據抓取

什麼是Ajax?

Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創建交互式、快速動態網頁應用的網頁開發技術,無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。
通過在後臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

Ajax 最大的優點是在不重新加載整個頁面的情況下,可以與服務器交換數據並更新部分網頁內容。

Ajax-get 請求

今天我們看的是豆瓣的電影排行——>就是這個東東
在這裏插入圖片描述
在這裏插入圖片描述在豆瓣電影裏,當我們把滾動條拉到最底下後,會重新加載,但是頁面沒有刷新,這是另一個接口,是Ajax數據,而這時看一下,時get請求
我們再F12一下,Ajax數據看,不用看ALL 直接看XHR
在這裏插入圖片描述分析 query string 我們發現 start limit
經過分析,我們 知道,start 是指從第幾條電影開始,limit是指,每次加載多少
下面我們寫代碼:

import urllib.request
import urllib.parse

url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'

page = input('請輸入你先要第幾頁的數據')
number = 20
start = (int(page)-1)*number
data = {
    'start': start,
    'limit': number,

}

# 將字典來轉化爲 query_string
query_string = urllib.parse.urlencode(data)
#print(query_string)
url += query_string
#print(url)
# 這裏的頭部,我就簡單的僞裝一下
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'
}
# 構建請求對象,發送請求
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
# 打印一下看看
print(response.read().decode())

順利的,我們成功了,來個圖看看
在這裏插入圖片描述我們發現Ajax get請求數據的抓取和普通get的沒有太大區別,主要的要分析傳遞的參數,

Ajax-post 請求

下面我們查詢一下肯德基餐廳的地址信息
在這裏插入圖片描述在這裏插入圖片描述同樣我們看到了三個參數,keyword pagelndex pageSiz 分析於上面相似,直接看代碼 ,不多解釋了

import urllib.request
import urllib.parse

url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
city = input('你所在的城市:')
page = input('你想瀏覽的頁碼:')
pagesize = input('你想每頁顯示幾個:')

# 構建處理表單 
formdata = {
    'cname': city,
    'pid': '',
    'pageIndex': page,
    'pageSize': pagesize,
}
formdata = urllib.parse.urlencode(formdata).encode()

# 僞裝
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'

}

request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request,data=formdata)

print(response.read().decode())

如果想看好幾頁,那就循環抓取一下,今天就學這些了,

明天我們學習一下 代理設置和 URLError

我又來要讚了,如果覺得可以學到些什麼,或者講解的清楚的話,點個贊再走吧
歡迎各位路過的大佬評論,指正錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章