最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬取肯德基官網(wǎng)ajax的post請(qǐng)求實(shí)現(xiàn)過(guò)程

 更新時(shí)間:2021年10月13日 16:06:18   作者:Bitdancing  
這篇文章主要介紹了Python爬取肯德基官網(wǎng)ajax的post請(qǐng)求實(shí)現(xiàn)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家學(xué)有所得,多多進(jìn)步

請(qǐng)?zhí)砑訄D片描述

準(zhǔn)備工作

查看肯德基官網(wǎng)的請(qǐng)求方法:post請(qǐng)求。

在這里插入圖片描述

X-Requested-With: XMLHttpRequest 判斷得肯德基官網(wǎng)是ajax請(qǐng)求

在這里插入圖片描述

通過(guò)這兩個(gè)準(zhǔn)備步驟,明確本次爬蟲目標(biāo):
ajax的post請(qǐng)求肯德基官網(wǎng) 獲取上??系禄攸c(diǎn)前10頁(yè)。

分析

獲取上??系禄攸c(diǎn)前10頁(yè),那就需要先對(duì)每頁(yè)的url進(jìn)行分析。

第一頁(yè)

# page1
# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# POST
# cname: 上海
# pid:
# pageIndex: 1
# pageSize: 10

第二頁(yè)

# page2
# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# POST
# cname: 上海
# pid:
# pageIndex: 2
# pageSize: 10

第三頁(yè)依次類推。

程序入口

首先回顧urllib爬取的基本操作:

# 使用urllib獲取百度首頁(yè)的源碼
import urllib.request

# 1.定義一個(gè)url,就是你要訪問(wèn)的地址
url = 'http://www.baidu.com'

# 2.模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求 response響應(yīng)
response = urllib.request.urlopen(url)

# 3.獲取響應(yīng)中的頁(yè)面的源碼 content內(nèi)容
# read方法 返回的是字節(jié)形式的二進(jìn)制數(shù)據(jù)
# 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符串
# 二進(jìn)制-->字符串  解碼 decode方法
content = response.read().decode('utf-8')

# 4.打印數(shù)據(jù)
print(content)

1.定義一個(gè)url,就是你要訪問(wèn)的地址

2.模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求 response響應(yīng)

3.獲取響應(yīng)中的頁(yè)面的源碼 content內(nèi)容

if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始頁(yè)碼: '))
    end_page = int(input('請(qǐng)輸入結(jié)束頁(yè)碼: '))

    for page in range(start_page, end_page+1):
        # 請(qǐng)求對(duì)象的定制
        request = create_request(page)
        # 獲取網(wǎng)頁(yè)源碼
        content = get_content(request)
        # 下載數(shù)據(jù)
        down_load(page, content)

對(duì)應(yīng)的,我們?cè)谥骱瘮?shù)中也類似聲明方法。

url組成數(shù)據(jù)定位

請(qǐng)?zhí)砑訄D片描述

爬蟲的關(guān)鍵在于找接口。對(duì)于這個(gè)案例,在預(yù)覽頁(yè)可以找到頁(yè)面對(duì)應(yīng)的json數(shù)據(jù),說(shuō)明這是我們要的數(shù)據(jù)。

請(qǐng)?zhí)砑訄D片描述

構(gòu)造url

不難發(fā)現(xiàn),肯德基官網(wǎng)的url的一個(gè)共同點(diǎn),我們把它保存為base_url。

base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'

參數(shù)

老樣子,找規(guī)律,只有'pageIndex'和頁(yè)碼有關(guān)。

    data = {
        'cname': '上海',
        'pid': '',
        'pageIndex': page,
        'pageSize': '10'
    }

post請(qǐng)求

  • post請(qǐng)求的參數(shù) 必須要進(jìn)行編碼

data = urllib.parse.urlencode(data).encode('utf-8')

  • 編碼之后必須調(diào)用encode方法
  • 參數(shù)放在請(qǐng)求對(duì)象定制的方法中:post的請(qǐng)求的參數(shù),是不會(huì)拼接在url后面的,而是放在請(qǐng)求對(duì)象定制的參數(shù)中

所以將data進(jìn)行編碼

data = urllib.parse.urlencode(data).encode('utf-8')

標(biāo)頭獲?。ǚ乐狗磁赖囊环N手段)

請(qǐng)?zhí)砑訄D片描述

請(qǐng)?zhí)砑訄D片描述

即 響應(yīng)頭中UA部分。

User Agent,用戶代理,特殊字符串頭,使得服務(wù)器能夠識(shí)別客戶使用的操作系統(tǒng)及版本,CPU類型,瀏覽器及版本,瀏覽器內(nèi)核,瀏覽器渲染引擎,瀏覽器語(yǔ)言,瀏覽器插件等。

 headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'
    }

請(qǐng)求對(duì)象定制

參數(shù),base_url,請(qǐng)求頭都準(zhǔn)備得當(dāng)后,就可以進(jìn)行請(qǐng)求對(duì)象定制了。

 request = urllib.request.Request(base_url,
  headers=headers, data=data)

獲取網(wǎng)頁(yè)源碼

把request請(qǐng)求作為參數(shù),模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求 獲得response響應(yīng)。

 response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')

獲取響應(yīng)中的頁(yè)面的源碼,下載數(shù)據(jù)

使用 read()方法,得到字節(jié)形式的二進(jìn)制數(shù)據(jù),需要使用 decode進(jìn)行解碼,轉(zhuǎn)換為字符串。

content = response.read().decode('utf-8')

然后我們將下載得到的數(shù)據(jù)寫進(jìn)文件,使用 with open() as fp 的語(yǔ)法,系統(tǒng)自動(dòng)關(guān)閉文件。

def down_load(page, content):
    with open('kfc_' + str(page) + '.json', 'w', encoding='utf-8') as fp:
        fp.write(content)

全部代碼

# ajax的post請(qǐng)求肯德基官網(wǎng) 獲取上海肯德基地點(diǎn)前10頁(yè)
# page1
# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# POST
# cname: 上海
# pid:
# pageIndex: 1
# pageSize: 10
# page2
# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# POST
# cname: 上海
# pid:
# pageIndex: 2
# pageSize: 10
import urllib.request, urllib.parse
def create_request(page):
    base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
    data = {
        'cname': '上海',
        'pid': '',
        'pageIndex': page,
        'pageSize': '10'
    }
    data = urllib.parse.urlencode(data).encode('utf-8')
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'
    }
    request = urllib.request.Request(base_url, headers=headers, data=data)
    return request

def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

def down_load(page, content):
    with open('kfc_' + str(page) + '.json', 'w', encoding='utf-8') as fp:
        fp.write(content)

if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始頁(yè)碼: '))
    end_page = int(input('請(qǐng)輸入結(jié)束頁(yè)碼: '))
    for page in range(start_page, end_page+1):
        # 請(qǐng)求對(duì)象的定制
        request = create_request(page)
        # 獲取網(wǎng)頁(yè)源碼
        content = get_content(request)
        # 下載數(shù)據(jù)
        down_load(page, content)

爬取后結(jié)果

在這里插入圖片描述

以上就是Python爬取肯德基官網(wǎng)ajax的post請(qǐng)求實(shí)現(xiàn)過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于Python爬取肯德基官網(wǎng)ajax的post請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 通過(guò)C++學(xué)習(xí)Python

    通過(guò)C++學(xué)習(xí)Python

    這篇文章主要介紹了通過(guò)C++學(xué)習(xí)Python,通過(guò)對(duì)比分析,讓我們能夠更好的學(xué)習(xí)python.
    2015-01-01
  • python 實(shí)現(xiàn)從高分辨圖像上摳取圖像塊

    python 實(shí)現(xiàn)從高分辨圖像上摳取圖像塊

    今天小編就為大家分享一篇python 實(shí)現(xiàn)從高分辨圖像上摳取圖像塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python高階爬蟲實(shí)戰(zhàn)分析

    python高階爬蟲實(shí)戰(zhàn)分析

    這篇文章給大家分享了python高階爬蟲實(shí)戰(zhàn)的相關(guān)實(shí)例內(nèi)容以及技巧分析,有興趣的朋友參考下。
    2018-07-07
  • Python+matplotlib調(diào)用隨機(jī)函數(shù)生成變化圖形

    Python+matplotlib調(diào)用隨機(jī)函數(shù)生成變化圖形

    這篇文章主要介紹了如何在Python中利用隨機(jī)函數(shù)生成變化的圖形,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定吧參考價(jià)值,需要的可以了解一下
    2022-04-04
  • Python實(shí)現(xiàn)獲取操作系統(tǒng)版本信息方法

    Python實(shí)現(xiàn)獲取操作系統(tǒng)版本信息方法

    這篇文章主要介紹了Python實(shí)現(xiàn)獲取操作系統(tǒng)版本信息方法,本文在命令行中獲取操作系統(tǒng)信息,介紹了platform模塊的使用,需要的朋友可以參考下
    2015-04-04
  • Python中的反射知識(shí)點(diǎn)總結(jié)

    Python中的反射知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于Python中的反射知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-11-11
  • 關(guān)于DataFrame中某列值的替換map(dict)

    關(guān)于DataFrame中某列值的替換map(dict)

    這篇文章主要介紹了關(guān)于DataFrame中某列值的替換map(dict),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 基于python的Paxos算法實(shí)現(xiàn)

    基于python的Paxos算法實(shí)現(xiàn)

    這篇文章主要介紹了基于python的Paxos算法實(shí)現(xiàn),理解一個(gè)算法最快,最深刻的做法,我覺(jué)著可能是自己手動(dòng)實(shí)現(xiàn),雖然項(xiàng)目中不用自己實(shí)現(xiàn),有已經(jīng)封裝好的算法庫(kù),供我們調(diào)用,我覺(jué)著還是有必要自己親自實(shí)踐一下,需要的朋友可以參考下
    2019-07-07
  • python中import和from-import的區(qū)別解析

    python中import和from-import的區(qū)別解析

    這篇文章主要介紹了python中import和from-import的區(qū)別解析,本文通過(guò)實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Django JSonResponse對(duì)象的實(shí)現(xiàn)

    Django JSonResponse對(duì)象的實(shí)現(xiàn)

    本文主要介紹了Django JSonResponse對(duì)象的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

额敏县| 雷州市| 前郭尔| 黎川县| 仁化县| 牡丹江市| 纳雍县| 双峰县| 梨树县| 大同县| 焦作市| 平昌县| 沧源| 鄯善县| 新昌县| 文登市| 宜宾市| 枝江市| 汶上县| 溆浦县| 望奎县| 合水县| 琼海市| 宣恩县| 依兰县| 谢通门县| 镇康县| 瑞金市| 尚义县| 娄底市| 青海省| 九龙坡区| 曲沃县| 获嘉县| 克什克腾旗| 余庆县| 铁岭市| 辉县市| 鹤壁市| 大石桥市| 兴城市|