又到了一年一度的國慶假期。今年國慶、中秋撞到一起,所以打算回家過節。從帝都到海口,每到節假日的機票都是全價票…2400大洋的單程票,消費不起呀!所以為了買到便宜點的機票,我就寫了乙個簡單的爬蟲來監控機票價錢。
可能有人會覺得,阿里飛豬,攜程什麼的都有監控,何必自找麻煩。對於乙個程式設計師來說,能自己做到的事情就不會去使用別人的東西。而且他們的產品不一定能滿足我的需求啊。廢話不多說,正文分割線!
進入查詢頁面後,發現京東查機票。一共發了三個非同步的get請求來請求機票資料。
這裡,我也沒弄明白為什麼京東要使用3個請求來獲取機票資訊。多次測試發現,這三個請求中會有概率查不到機票。既然這樣,我們**中也請求三次,直到拿到機票結果資訊。
首先我們需要構建乙個get請求,把引數一起傳過去。
#模擬請求頭(可以根據自己瀏覽器訪問,直接copy過來。)
headers =
#requests.session(),這樣的requests請求,會帶上前一次請求的sessionid
roon_session = requests.session()
#請求所攜帶的引數。需要哪些引數,分析目標位址。
payload =
#請求目標
url = ''
#以json分方式讀取請求結果(結果返回的是乙個json)
page = roon_session.get(url,headers=headers, params=payload,proxies=proxies).json()
非常簡單,幾行**。我們的請求url就構建好了。以上**直接就能拿到京東的機票查詢結果。注釋我都寫在**上了,非常簡單易懂,這裡就不多說。
請求**寫完之後,基本上就沒有什麼東西。 接下來基本上是看你如何去做這個請求。主要是程式的完整性,如何去避免產生問題使程式不能繼續執行。
這裡我是參照京東自己的三次請求,來寫這部分的邏輯。
def
get_plan_money
(): times = 1
headers =
# 使用**
proxies =
roon_session = requests.session()
#**測試部分
# url = ''
# page = roon_session.get(url,proxies = proxies).text
# print (page)
# exit()
payload =
url = ''
page = roon_session.get(url,headers=headers, params=payload,proxies=proxies).json()
if page['data']['flights'] is
none:
# payload =
times = 2
print ('已進行二次請求')
page = roon_session.get(url, params=payload, headers=headers, proxies=proxies).json()
# if page['data']['flights'] is none:
# print(page)
# exit()
# 為了確保能傳送,這裡再進行第三次請求(京東的http 請求了四次。)
if page['data']['flights'] is
none:
print('已進行第三次請求')
times = 3
page = roon_session.get(url, params=payload, headers=headers, proxies=proxies).json()
# 為了確保能傳送,這裡再進行第四次請求(京東的http 請求了四次。)
if page['data']['flights'] is
none:
print('已進行第四次請求')
times = 4
page = roon_session.get(url, params=payload, headers=headers, proxies=proxies).json()
# 為避免第四次請求仍未成功引起程式報錯
if page['data']['flights'] is
none:
print('四次請求均未成功')
# exit()
print
'%s 從%s飛往%s的飛機'%('20171008','海口','北京')
print
'一共查詢到%s個航班'%(len(page['data']['flights']))
# 建立列表來儲存機票價錢
money_list =
for plan in page['data']['flights']:
print
'%s%s-最低價:%s' % (plan['airwayscn'], plan['flightno'], plan['bingoleastclassinfo']['price'])
# 將列表排序
money_list.sort()
# print (money_list)
return money_list
主要還是,判斷返回的機票資料是否存在,如果不存在再進行一次請求。以上**,我用定時任務跑了兩周,沒有出現過一次錯誤。
拿到了機票資料,我們就可以做很多事情了。
比如我就做了乙個簡單的郵件系統,每半個小時監控我設定好的資料,然後給我發一封郵件。上班的時候,每半個小時,乙個彈窗我就知道機票**有沒有變動,非常直觀。
或者使用這些變化的機票,用來做資料分析。比如國慶期間,哪個航線的機票最便宜,打折力度最大。作為自己國慶出行的乙個參考。
當然還可以做很多事情,只要你拿到了這些資料,利用起來是很有價值。
python京東商品 Python爬取京東商品資料
對京東某一商品資訊頁面的html 進行分析。能夠發現它的圖書產品資訊頁面都含有這樣一段 不同類的商品頁面有些不同 window.pageconfig 顯然這就是我們須要的商品資訊,python 例如以下 import json import re import urllib for i in ran...
Python爬取京東商品
自動開啟京東首頁,並輸入你要搜尋的東西,進入介面進行爬取資訊 from selenium import webdriver import time class jdspider object def init self self.browser webdriver.chrome self.url s...
python爬取京東評論
這不是我的第乙個爬蟲,但大多數都是像這樣簡單粗暴的,因為一開始對於定義函式,然後再進行相應的操作,是比較困難的,這能直接寫for迴圈語句。然後,我們便開始進行相應的爬蟲第一步 匯入必要的包 import requests import json header這個的作用在於偽裝成瀏覽器進行操作,有些網...