一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python實戰練習之終于對肯德基下手

Python實戰練習之終于對肯德基下手

2022-01-23 22:40Bitdancing Python

讀萬卷書不如行萬里路,學的扎不扎實要通過實戰才能看出來,本篇文章手把手帶你爬下肯德基的官網,大家可以在過程中查缺補漏,看看自己掌握程度怎么樣

Python實戰練習之終于對肯德基下手

 

準備工作

查看肯德基官網的請求方法:post請求。

Python實戰練習之終于對肯德基下手

X-Requested-With: XMLHttpRequest 判斷得肯德基官網是ajax請求

Python實戰練習之終于對肯德基下手

通過這兩個準備步驟,明確本次爬蟲目標:
ajax的post請求肯德基官網 獲取上海肯德基地點前10頁。

 

分析

獲取上海肯德基地點前10頁,那就需要先對每頁的url進行分析。

第一頁

# 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.定義一個url,就是你要訪問的地址
url = 'http://www.baidu.com'

# 2.模擬瀏覽器向服務器發送請求 response響應
response = urllib.request.urlopen(url)

# 3.獲取響應中的頁面的源碼 content內容
# read方法 返回的是字節形式的二進制數據
# 將二進制數據轉換為字符串
# 二進制-->字符串  解碼 decode方法
content = response.read().decode('utf-8')

# 4.打印數據
print(content)
  • 定義一個url,就是你要訪問的地址
  • 模擬瀏覽器向服務器發送請求 response響應
  • 獲取響應中的頁面的源碼 content內容
if __name__ == '__main__':
  start_page = int(input('請輸入起始頁碼: '))
  end_page = int(input('請輸入結束頁碼: '))

  for page in range(start_page, end_page+1):
      # 請求對象的定制
      request = create_request(page)
      # 獲取網頁源碼
      content = get_content(request)
      # 下載數據
      down_load(page, content)

對應的,我們在主函數中也類似聲明方法。

 

url組成數據定位

Python實戰練習之終于對肯德基下手

爬蟲的關鍵在于找接口。對于這個案例,在預覽頁可以找到頁面對應的json數據,說明這是我們要的數據。

Python實戰練習之終于對肯德基下手

 

構造url

不難發現,肯德基官網的url的一個共同點,我們把它保存為base_url。

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

 

參數

老樣子,找規律,只有'pageIndex'和頁碼有關。

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

 

post請求

  • post請求的參數 必須要進行編碼

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

  • 編碼之后必須調用encode方法
  • 參數放在請求對象定制的方法中:post的請求的參數,是不會拼接在url后面的,而是放在請求對象定制的參數中

所以將data進行編碼

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

 

標頭獲取(防止反爬的一種手段)

Python實戰練習之終于對肯德基下手

Python實戰練習之終于對肯德基下手

即 響應頭中UA部分。

User Agent,用戶代理,特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本,CPU類型,瀏覽器及版本,瀏覽器內核,瀏覽器渲染引擎,瀏覽器語言,瀏覽器插件等。

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'
  }

 

請求對象定制

參數,base_url,請求頭都準備得當后,就可以進行請求對象定制了。

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

 

獲取網頁源碼

把request請求作為參數,模擬瀏覽器向服務器發送請求 獲得response響應。

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

 

獲取響應中的頁面的源碼,下載數據

使用 read()方法,得到字節形式的二進制數據,需要使用 decode進行解碼,轉換為字符串。

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

然后我們將下載得到的數據寫進文件,使用 with open() as fp 的語法,系統自動關閉文件。

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

 

全部代碼

# ajax的post請求肯德基官網 獲取上海肯德基地點前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('請輸入起始頁碼: '))
  end_page = int(input('請輸入結束頁碼: '))

  for page in range(start_page, end_page+1):
      # 請求對象的定制
      request = create_request(page)
      # 獲取網頁源碼
      content = get_content(request)
      # 下載數據
      down_load(page, content)

爬取后結果

Python實戰練習之終于對肯德基下手

鞠躬!!!其實還爬過Lisa的照片,想看爬蟲代碼的歡迎留言 !!!

到此這篇關于Python實戰練習之終于對肯德基下手的文章就介紹到這了,更多相關Python 肯德基官網內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Joy_Cheung666/article/details/120710070

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美兽皇video | 亚洲乱码一二三四区国产 | 日本一区二区三区在线 视频 | 热99这里只有精品 | 操小女人| 国产成人激情 | 亚洲国产成人久久综合一区 | 亚洲成人99 | haodiaose在线精品免费观看 | 国内免费高清视频在线观看 | 好大好硬好湿好紧h | 日本公乱妇视频 | 艹b小说 | 王雨纯 羞羞 | 好深快点再快点好爽视频 | 成人在线观看视频免费 | 嗯啊好大好爽 | 色国产视频 | 9久热这里只有精品视频在线观看 | 天天综合色天天综合网 | free白嫩性hd| 精品国产综合区久久久久久 | 日韩欧美一区二区三区中文精品 | yin乱被cao系列 | 成年人视频在线播放 | 特级毛片免费观看视频 | 国产一区视频在线免费观看 | 美女逼逼软件 | re99热| 明星h文集合短篇小说 | 四虎影院新网址 | 国色天香社区视频免费高清在线观看 | 日韩毛片免费线上观看 | 亚洲四虎永久在线播放 | 亚洲国产成人在人网站天堂 | 欧美成人中文字幕 | 日韩网站在线 | seetube18日本第一次 | 奇米色7777 | 成人18视频在线观看 | 午夜亚洲一区二区福利 |