摘要:準備工作查看肯德基官網(wǎng)的請求方法請求。判斷得肯德基官網(wǎng)是請求通過這兩個準備步驟,明確本次爬蟲目標的請求肯德基官網(wǎng)獲取上??系禄攸c前頁。構造不難發(fā)現(xiàn),肯德基官網(wǎng)的的一個共同點,我們把它保存為。
查看肯德基官網(wǎng)的請求方法:post請求。
X-Requested-With: XMLHttpRequest
判斷得肯德基官網(wǎng)是ajax
請求
通過這兩個準備步驟,明確本次爬蟲目標:
ajax的post請求肯德基官網(wǎng) 獲取上海肯德基地點前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.模擬瀏覽器向服務器發(fā)送請求 response響應response = urllib.request.urlopen(url)# 3.獲取響應中的頁面的源碼 content內(nèi)容# read方法 返回的是字節(jié)形式的二進制數(shù)據(jù)# 將二進制數(shù)據(jù)轉換為字符串# 二進制-->字符串 解碼 decode方法content = response.read().decode("utf-8")# 4.打印數(shù)據(jù)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) # 獲取網(wǎng)頁源碼 content = get_content(request) # 下載數(shù)據(jù) down_load(page, content)
對應的,我們在主函數(shù)中也類似聲明方法。
爬蟲的關鍵在于找接口。對于這個案例,在預覽頁可以找到頁面對應的json
數(shù)據(jù),說明這是我們要的數(shù)據(jù)。
不難發(fā)現(xiàn),肯德基官網(wǎng)的url的一個共同點,我們把它保存為base_url
。
base_url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
老樣子,找規(guī)律,只有’pageIndex’和頁碼有關。
data = { "cname": "上海", "pid": "", "pageIndex": page, "pageSize": "10" }
data = urllib.parse.urlencode(data).encode("utf-8")
編碼之后必須調(diào)用encode方法
參數(shù)放在請求對象定制的方法中:post的請求的參數(shù),是不會拼接在url后面的,而是放在請求對象定制的參數(shù)中
所以將data進行編碼
data = urllib.parse.urlencode(data).encode("utf-8")
即 響應頭中UA部分。
User Agent,用戶代理,特殊字符串頭,使得服務器能夠識別客戶使用的操作系統(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" }
參數(shù),base_url,請求頭都準備得當后,就可以進行請求對象定制了。
request = urllib.request.Request(base_url, headers=headers, data=data)
把request請求作為參數(shù),模擬瀏覽器向服務器發(fā)送請求 獲得response響應。
response = urllib.request.urlopen(request) content = response.read().decode("utf-8")
使用 read()
方法,得到字節(jié)形式的二進制數(shù)據(jù),需要使用 decode
進行解碼,轉換為字符串。
content = response.read().decode("utf-8")
然后我們將下載得到的數(shù)據(jù)寫進文件,使用 with open() as fp
的語法,系統(tǒng)自動關閉文件。
def down_load(page, content): with open("kfc_" + str(page) + ".json", "w", encoding="utf-8") as fp: fp.write(content)
# ajax的post請求肯德基官網(wǎng) 獲取上??系禄攸c前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: 10import urllib.request, urllib.parsedef 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 requestdef get_content(request): response = urllib.request.urlopen(request) content = response.read().decode("utf-8") return contentdef 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) # 獲取網(wǎng)頁源碼 content = get_content(request) # 下載數(shù)據(jù) down_load(page, content)
鞠躬?。?!其實還爬過Lisa的照片,想看爬蟲代碼的歡迎留言 ?。?!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/122441.html
摘要:爬蟲之請求爬取豆瓣網(wǎng)的分頁瀏覽請求請輸入想要第幾頁的數(shù)據(jù)構建參數(shù)將字典轉化為修改肯德基配送信息請求請輸入要查詢的城市請輸入要查詢第幾頁請輸入要多少個 python爬蟲之a(chǎn)jax請求 爬取豆瓣網(wǎng)的分頁瀏覽get請求: import urllib.request import urllib.parse url = https://movie.douban.com/j/chart/top...
摘要:返回結果如下,接下來我們便開始爬取西刺代理,首先我們打開瀏覽器查看網(wǎng)頁,并找到和端口元素的信息。爬取代理地址,代理的是西刺代理去掉可能重復的等待秒將要爬取頁數(shù)的爬取好后存入數(shù)組,然后再對其中的逐一測試。 有時候在網(wǎng)站看小說,會莫名跳出來一個疑似機器惡意爬取,暫時無法訪問這樣類似的網(wǎng)站提示,需要刷新一下或者輸入一個驗證碼才能重新進入,這樣的情況偶有發(fā)生,相信大家都有遇到過。出現(xiàn)這個現(xiàn)象的...
摘要:返回結果如下,接下來我們便開始爬取西刺代理,首先我們打開瀏覽器查看網(wǎng)頁,并找到和端口元素的信息。爬取代理地址,代理的是西刺代理去掉可能重復的等待秒將要爬取頁數(shù)的爬取好后存入數(shù)組,然后再對其中的逐一測試。 有時候在網(wǎng)站看小說,會莫名跳出來一個疑似機器惡意爬取,暫時無法訪問這樣類似的網(wǎng)站提示,需要刷新一下或者輸入一個驗證碼才能重新進入,這樣的情況偶有發(fā)生,相信大家都有遇到過。出現(xiàn)這個現(xiàn)象的...
摘要:可以通過傳入待刪除數(shù)組元素組成的數(shù)組進行一次性刪除。如果后臺返回的為表示登錄的已失效,需要重新執(zhí)行。等所有的異步執(zhí)行完畢后,再執(zhí)行回調(diào)函數(shù)?;卣{(diào)函數(shù)的參數(shù)是每個函數(shù)返回數(shù)據(jù)組成的數(shù)組。 其實在早之前,就做過立馬理財?shù)匿N售額統(tǒng)計,只不過是用前端js寫的,需要在首頁的console調(diào)試面板里粘貼一段代碼執(zhí)行,點擊這里。主要是通過定時爬取https://www.lmlc.com/s/web/...
閱讀 1254·2023-04-25 18:57
閱讀 2141·2023-04-25 16:28
閱讀 3946·2021-11-24 09:39
閱讀 3641·2021-11-16 11:45
閱讀 1831·2021-10-13 09:40
閱讀 1271·2019-08-30 15:52
閱讀 1725·2019-08-30 10:57
閱讀 671·2019-08-29 16:55