python爬取京東機票,監控機票,機票價格分析

2021-08-08 17:56:24 字數 3099 閱讀 3525

又到了一年一度的國慶假期。今年國慶、中秋撞到一起,所以打算回家過節。從帝都到海口,每到節假日的機票都是全價票…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這個的作用在於偽裝成瀏覽器進行操作,有些網...