目标:
爬取未来40天多个航线的机票价格和航班信息python Ajax异步爬取机票航班信息www.wangwanghub.com
Ajax介绍:
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
起始URL:
明确爬取数据信息:
这个api网址是无法访问的,不过依旧有数据传送,我们只能通过模拟头部请求获取(payload是一种以JSON格式进行数据传输的一种方式)
发现有一个products 的文件 (如果没有 请尝试 F5 刷新页面)
我们可以看到Json数据都在response当中,也就是我们想要的航班信息,机票价格都是通过这个文件传送的. 我们复制这行Json数据在其他软件展开便于观察内容,(或者网页搜索:Json在线解析)
首先是航班信息:
往下有机票价格:
我们看到机票价格分了很多种类,有售价,打折的价格,我们就爬取第一个price就好了,经过观察大部分价格都是一样的
我们已经明确的要爬取的信息了, 接下来就开始抓取数据吧
先获取一天一个城市的航班信息
获取Json 信息:
import requests
import json
from fake_useragent import UserAgent
if __name__ == "__main__":
url = url = "https://flights.ctrip.com/itinerary/api/12808/products/oneway/sjw,sjw-xmn?date=2020-03-25"
# 这里的url 必须写全!!!
headers = {
"User-Agent": '{}'.format(UserAgent().random), # 构造随机请求头
"Referer": "https://flights.ctrip.com/itinerary/oneway/sjw-xmn?date=2020-03-25",
"Content-Type": "application/json"
}
request_payload = {
"flightWay": "Oneway",
"classType": "ALL",
"hasChild": False,
"hasBaby": False,
"searchIndex": 1,
"airportParams": [
{"dcity": "SJW", "acity": "XMN", "dcityname": "石家庄", "acityname": "厦门", "date": "2020-03-25", "dcityid": 428}
]
"token": 从头部获取的token,写在这里
}
# post请求
response = requests.post(url, data=json.dumps(request_payload), headers=headers).text
print(response)
Json 提取信息
# post请求
response = requests.post(url, data=json.dumps(request_payload), headers=headers, timeout=30).text
# 避免爬取过快 设置延迟
# json.dumps 将 Python 对象编码成 JSON 字符串
routeLi