檢視肯德基官網的請求方法:post請求。
x-requested-with: xmlhttprequest判斷得肯德基官網是ajax請求
通過這兩個準備步驟,明確本次爬蟲目標:
ajax的post請求肯德基官網 獲取上海肯德基地點前10頁。
獲取上海肯德基地點前10頁,那就需要先對每頁的url進行分析。
第一頁# page1
# # post
# cname: 上海
# pid:
# pageindex: 1
# pagesize: 10
第二頁# page2
# # post
# cname: 上海
# pid:
# pageindex: 2
# pagesize: 10
第三頁依次類推。
首先回顧urllib爬取的基本操作:
# 使用urllib獲取百度首頁的原始碼
import urllib.request
# 1.定義乙個url,就是你要訪問的位址
url = ''
# 2.模擬瀏覽器向伺服器傳送請求 response響應
response = urllib.request.urlopen(url)
# 3.獲取響應中的頁面的原始碼 content內容
# read方法 返回的是位元組形式的二進位制資料
# 將二進位制資料轉換為字串
# 二進位制-->字串 解碼 decode方法
content = response.read().decode('utf-8')
# 4.列印資料
print(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)
對應的,我們在主函式中也類似宣告方法。
爬蟲的關鍵在於找介面。對於這個案例,在預覽頁可以找到頁面對應的json資料,說明這是我們要的資料。
不難發現,肯德基官網的url的乙個共同點,我們把它儲存為base_url。
base_url = ''
老樣子,找規律,只有'pageindex'和頁碼有關。
data =
data = urllib.parse.urlencode(data).encode('utf-8')
所以將data進行編碼
data = urllib.parse.urlencode(data).encode('utf-8')
即 響應頭中ua部分。
user agent,使用者**,特殊字串頭,使得伺服器能夠識別客戶使用的作業系統及版本,cpu型別,瀏覽器及版本,瀏覽器核心,瀏覽器渲染引擎,瀏覽器語言,瀏覽器外掛程式等。
headers =
引數,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
# # post
# cname: 上海
# pid:
# pageindex: 1
# pagesize: 10
# page2
# # post
# cname: 上海
# pid:
# pageindex: 2
# pagesize: 10
import urllib.request, urllib.parse
def create_request(page):
base_url = ''
data =
data = urllib.parse.urlencode(data).encode('utf-8')
headers =
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)
爬取後結果
鞠躬!!!其實還爬過lisa的**,想看爬蟲**的歡迎留言 !!!
python 實戰之猜年紀遊戲 練習。
python 實戰之猜年紀遊戲。1.給定年齡,使用者可以猜三次年齡 2.年齡猜對,讓使用者選擇兩次獎勵 3.使用者選擇兩次獎勵後可以退出 age 20 count 0 prize dict while count 3 inp age input 請輸入你的年齡 if not inp age.isdi...
Python實戰練習 if語句
1.判斷季節 使用者輸入月份,判斷這個月時那個季節 分析 3,4,5春季 6,7,8夏季 9,10 11秋季 12,1,2冬季 mouth int input 請輸入月份 sping 3,4,5 summer 6,7,8 autumn 9,10,11 winter 12,1,2 if mouth i...
實戰練習之 狀態模式
在第一遍學習大話設計模式的時候,寫過關於狀態模式的部落格。不過那個時候的素材主要來自於課本,理解的內容也是書上的例子,以 看懂 為主要目的。但是在這次機房收費系統合作版的實戰中,我需要以 會用 為主要目的了,當然,理解的也會有所深刻。此次我把狀態模式加在上學生下機處,主要為了計算消費金額。大致思路為...