python爬取京东机票,监控机票,机票价格分析

博主为节省机票费用,编写了一个Python爬虫来监控京东机票价格。通过分析目标地址,发现京东查询机票时发送三个异步GET请求。爬虫代码实现包括构建请求,确保至少一次成功获取机票信息。运行结果稳定,已用于邮件通知和数据分析,提供出行参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又到了一年一度的国庆假期。今年国庆、中秋撞到一起,所以打算回家过节。从帝都到海口,每到节假日的机票都是全价票…2400大洋的单程票,消费不起呀!所以为了买到便宜点的机票,我就写了一个简单的爬虫来监控机票价钱。
可能有人会觉得,阿里飞猪,携程什么的都有监控,何必自找麻烦。对于一个程序员来说,能自己做到的事情就不会去使用别人的东西。而且他们的产品不一定能满足我的需求啊。废话不多说,正文分割线!


分析目标地址

跟以前一样,爬虫第一件事。分析目标,看他是怎么处理机票查询。
地址:https://jipiao.jd.com/
进入查询页面后,发现京东查机票。一共发了三个异步的get请求来请求机票数据。
这里写图片描述
这里,我也没弄明白为什么京东要使用3个请求来获取机票信息。多次测试发现,这三个请求中会有概率查不到机票。既然这样,我们代码中也请求三次,直到拿到机票结果信息。

构建请求

首先我们需要构建一个get请求,把参数一起传过去。

#模拟请求头(可以根据自己浏览器访问,直接copy过来。)
headers = {
        'Host': "jipiao.jd.com",
        'Accept-Language': "zh-CN,zh;q=0.8,en;q=0.6",
        'Accept-Encoding': "gzip, deflate, br",
        'X-Requested-With' : 'XMLHttpRequest',
        'Connection': "keep-alive",
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"
    }

    #requests.session(),这样的requests请求,会带上前一次请求的sessionid
    roon_session = requests.session()

    #请求所携带的参数。需要哪些参数,分析目标地址。
    payload = {
  
  
### 使用Python爬虫获取京东商品评论数据 为了从京东平台抓取商品的用户评价,需先准备好相应的开发环境[^1]。这通常意味着安装必要的库文件,比如`requests`用于发起HTTP请求,`BeautifulSoup`或`lxml`用于解析HTML文档,还有可能需要`pandas`处理和保存数据。 在实际操作过程中,当访问特定的商品详情页时,可以通过浏览器开发者工具(F12)监控网络活动来识别加载评论区所使用的API接口及其传递参数[^2]。这些参数一般包括但不限于产品ID、分页索引等信息,它们帮助定位到具体的评论记录集合。 一旦确定了API端点URL模式及所需查询字符串后,就可以利用Python脚本来模拟发送GET/POST请求,并接收服务器返回的内容。由于返回的是JSON格式的数据流,因此要调用`.json()`方法将其转换成易于处理的对象结构以便后续提取有用字段,如用户名、评分星级、发表时间戳以及具体内容描述等[^4]。 下面是一个简化版的例子展示如何构建这样的爬虫: ```python import requests from pandas import DataFrame def fetch_reviews(product_id, page=0): url = f"https://api.m.jd.com/comment/skuProductPageComments?callback=fetchJSON_comment98&productId={product_id}&score=0&sortType=5&page={page}&pageSize=10" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Referer': f'https://item.jd.com/{product_id}.html' } response = requests.get(url=url, headers=headers).text.replace('fetchJSON_comment98(', '').replace(');', '') data = eval(response) reviews = [] for item in data['comments']: review = { "username": item["nickname"], "rating": item["score"], "date": item["creationTime"], "content": item["content"] } reviews.append(review) return reviews if __name__ == "__main__": product_id = input("请输入想要抓取评论的产品编号:") all_reviews = [] try: for i in range(10): # 假设只抓取前十页 new_reviews = fetch_reviews(product_id, i) if not new_reviews: break all_reviews.extend(new_reviews) df = DataFrame(all_reviews) df.to_csv(f"{product_id}_reviews.csv", index=False, encoding='utf_8_sig') print("成功导出了CSV文件.") except Exception as e: print(e) ``` 此代码片段展示了基本的工作流程:定义函数`fetch_reviews`接受商品ID和其他可选参数;设置合适的HTTP头以模仿真实用户的浏览行为;向指定地址发出请求并解析得到的结果;最后将收集来的多条评论汇总至列表再转存为CSV表格形式供进一步分析使用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值