亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實(shí)戰(zhàn)練習(xí)之終于對(duì)肯德基下手

 更新時(shí)間:2021年10月12日 09:16:03   作者:Bitdancing  
讀萬卷書不如行萬里路,學(xué)的扎不扎實(shí)要通過實(shí)戰(zhàn)才能看出來,本篇文章手把手帶你爬下肯德基的官網(wǎng),大家可以在過程中查缺補(bǔ)漏,看看自己掌握程度怎么樣

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

準(zhǔn)備工作

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

在這里插入圖片描述

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

在這里插入圖片描述

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

分析

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

第一頁

# 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

第三頁依次類推。

程序入口

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

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

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

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

# 3.獲取響應(yīng)中的頁面的源碼 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)
  • 定義一個(gè)url,就是你要訪問的地址
  • 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求 response響應(yīng)
  • 獲取響應(yīng)中的頁面的源碼 content內(nèi)容
if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始頁碼: '))
    end_page = int(input('請(qǐng)輸入結(jié)束頁碼: '))

    for page in range(start_page, end_page+1):
        # 請(qǐng)求對(duì)象的定制
        request = create_request(page)
        # 獲取網(wǎng)頁源碼
        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ù)覽頁可以找到頁面對(duì)應(yīng)的json數(shù)據(jù),說明這是我們要的數(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'和頁碼有關(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)核,瀏覽器渲染引擎,瀏覽器語言,瀏覽器插件等。

 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)頁源碼

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

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

獲取響應(yīng)中的頁面的源碼,下載數(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 的語法,系統(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) 獲取上??系禄攸c(diǎn)前10頁

# 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)輸入起始頁碼: '))
    end_page = int(input('請(qǐng)輸入結(jié)束頁碼: '))

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

爬取后結(jié)果

在這里插入圖片描述

鞠躬?。?!其實(shí)還爬過Lisa的照片,想看爬蟲代碼的歡迎留言 ?。?!

到此這篇關(guān)于Python實(shí)戰(zhàn)練習(xí)之終于對(duì)肯德基下手的文章就介紹到這了,更多相關(guān)Python 肯德基官網(wǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁數(shù)據(jù)

    python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用

    Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用

    本文主要介紹了Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • LyScript實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描的方法詳解

    LyScript實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描的方法詳解

    LyScript插件中提供了三種基本的堆棧操作方法,其中push_stack用于入棧,pop_stack用于出棧,peek_stac可用于檢查指定堆棧位置處的內(nèi)存參數(shù)。所以本文將利用這一特性實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描,感興趣的可以了解一下
    2022-08-08
  • Python?pandas按行、按列遍歷DataFrame的幾種方式

    Python?pandas按行、按列遍歷DataFrame的幾種方式

    在python的DataFrame中,因?yàn)閿?shù)據(jù)中可以有多個(gè)行和列,而且每行代表一個(gè)數(shù)據(jù)樣本,我們可以將DataFrame看作數(shù)據(jù)表,那你知道如何按照數(shù)據(jù)表中的行遍歷嗎,下面這篇文章主要給大家介紹了關(guān)于Python?pandas按行、按列遍歷DataFrame的幾種方式,需要的朋友可以參考下
    2022-09-09
  • 關(guān)于numpy.array的shape屬性理解

    關(guān)于numpy.array的shape屬性理解

    這篇文章主要介紹了關(guān)于numpy.array的shape屬性理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • pytorch實(shí)現(xiàn)梯度下降和反向傳播圖文詳細(xì)講解

    pytorch實(shí)現(xiàn)梯度下降和反向傳播圖文詳細(xì)講解

    這篇文章主要介紹了pytorch實(shí)現(xiàn)梯度下降和反向傳播,反向傳播的目的是計(jì)算成本函數(shù)C對(duì)網(wǎng)絡(luò)中任意w或b的偏導(dǎo)數(shù)。一旦我們有了這些偏導(dǎo)數(shù),我們將通過一些常數(shù)α的乘積和該數(shù)量相對(duì)于成本函數(shù)的偏導(dǎo)數(shù)來更新網(wǎng)絡(luò)中的權(quán)重和偏差
    2023-04-04
  • python requests.post帶head和body的實(shí)例

    python requests.post帶head和body的實(shí)例

    今天小編就為大家分享一篇python requests.post帶head和body的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 關(guān)于python pyqt5安裝失敗問題的解決方法

    關(guān)于python pyqt5安裝失敗問題的解決方法

    這篇文章主要給大家介紹了關(guān)于python pyqt5安裝失敗問題的解決方法,文中給出了詳細(xì)的解決過程與解決方法,對(duì)同樣遇到這個(gè)問題的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 解決python報(bào)錯(cuò)MemoryError的問題

    解決python報(bào)錯(cuò)MemoryError的問題

    今天小編就為大家分享一篇解決python報(bào)錯(cuò)MemoryError的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 教你利用python實(shí)現(xiàn)企業(yè)微信發(fā)送消息

    教你利用python實(shí)現(xiàn)企業(yè)微信發(fā)送消息

    今天帶大家來練習(xí)python實(shí)戰(zhàn),文中對(duì)利用python實(shí)現(xiàn)企業(yè)微信發(fā)送消息作了詳細(xì)的圖文解說及代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論