背景:现在这个时代,快递横飞。我们想寄一个快递,给出的选择也是多种多样的(根据快递的大小、送达的时间、寄送的距离及价格、公司服务质量,来选择不同的快递[物流]公司)。往往合适的事情选择合适的方式,这才是最完美的。

需求:想寄一个大概 20 kg左右的包裹,不知道选择哪个快递公司最合适,有个各大快递公司快递信息以及价格目录表就爽歪歪了。

思路:获取各大快递物流公司查询接口,传入寄件地和目的地,以及重量。解析查询的返回结果,打印相关信息就ok了。

撸起袖子干,找到了一个各大快递公司运费价格查询的网址 快递窝(窃喜~~由于本人比较懒,省了好多事)

一、获取查询接口

F12 打开调试工具,选择NetWork选项,在对应输入框内输入相关信息,点击结果。查看 Request URL

二、获取相关数据

NetWork中查看 Form Data数据,分析数据所代表的含义

三、编写爬虫脚本

使用Python3.6编写脚本

"""
@author : zzw
@time : 2018/5/10 21:55
@file : queryprice.py
""" import urllib.request
import urllib.parse
import json
import re
import requests class QueryPrice(object):
# 初始化: who 对应的快递公司id; weight寄出物品的重量kg
def __init__(self, who, weight):
self.who = int(who)
self.weight = int(weight)
self.url = "http://www.kuaidiwo.cn/freight/ajaxjg.php" # 获取服务器响应
def get_response(self):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/63.0.3239.26 QQBrowser/10.0.1125.400'
}
data = {
'expid': self.who,
'provinceid': 9, # 上海id
'cityid': 155, # 浦东id
'toprovinceid': 1, # 北京id
'tocityid': 41, # 朝阳id
'weight': self.weight
}
# 使用requests 更加简洁
html = requests.post(self.url, data, headers).text
'''data = urllib.parse.urlencode(data, encoding='utf-8') # 将data数据编码为 utf-8
req = urllib.request.Request(self.url, data, headers) # 封装请求信息
resp = urllib.request.urlopen(req) # 发送请求
html = resp.read().decode('utf-8') # 将utf-8解码为 Unicode
'''
# print(html)
return html # 解析返回的结果
def get_result(self):
first = '上海浦东--> 北京朝阳 %dkg物品运费为:' % self.weight
html = self.get_response()
info = json.loads(html)
if info['data'] and info['jg']:
result1 = first + "%s 元\t%s " % (info['jg'], info['data'][0]['name'])
# print(result)
return result1
else:
result2 = first + "{0} 元\t未查询到此快递公司 id={1}".format(info['jg'], self.who)
return str(result2) if __name__ == '__main__':
prices = []
for i in range(1, 50):
q = QueryPrice(i, 20)
result = q.get_result()
price = int(re.findall(r'(\d+)\s元', result)[0])
if price != 0:
print(result)
prices.append(price)
print('最便宜价格为:%s \n最贵的价格为:%s' % (min(prices), max(prices)))

四、查看查询效果

查询的是前50个id(快递公司)的价格目录表,有些便宜的无法想象,有些贵的离谱。当然还是那句话,合适的服务合适的价格才是我们最合适的选择。





写在最后: 虽然查询出了这么多快递公司,甚至还有些听都没听过,但是这些快递(物流)公司的的价格也有些偏差。这里又要说到一些快递公司的乱收取费用的事了,有些公司在官网连个明码标价的都没有,个别区域就看心情和情况收费。

Python爬取指定重量的快递价格的更多相关文章

  1. python爬取指定新闻

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2894 给定一篇新闻的链接newsUrl,获取该新闻的全部信息 标题 ...

  2. Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  3. python爬取京东价格

    昨天准备爬取一个京东商品的价格,正则写好了一直是空的 后来我去页面里面看了下,价格标签里果然是空的 百度了下,大家都说是js来控制显示价格的 于是去抓包试试,找到了一条mgets的请求 中间很多参数不 ...

  4. Python 爬取所有51VOA网站的Learn a words文本及mp3音频

    Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...

  5. python爬取网站数据

    开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...

  6. Python-定时爬取指定城市天气(二)-邮件提醒

    目录 一.概述 二.模块重新划分 三.优化定时任务 四.发送邮件 五.源代码 一.概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气,并发送 ...

  7. Python-定时爬取指定城市天气(一)-发送给关心的微信好友

    一.背景 上班的日子总是3点一线,家里,公司和上班的路径,对于一个特别懒得我来说,经常遇到上班路上下雨了,而我却没带伞,多么痛的领悟.最近对python有一种狂热的学习热情,写了4年多的C++代码,对 ...

  8. python爬取网易云音乐歌曲评论信息

    网易云音乐是广大网友喜闻乐见的音乐平台,区别于别的音乐平台的最大特点,除了“它比我还懂我的音乐喜好”.“小清新的界面设计”就是它独有的评论区了——————各种故事汇,各种金句频出.我们可以透过歌曲的评 ...

  9. 利用Python爬取豆瓣电影

    目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...

随机推荐

  1. 【12】Django 中间件

     前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...

  2. python之单例模式、栈、队列和有序字典

    一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...

  3. Linux keepalived+nginx实现主从模式

    双机高可用方法目前分为两种: 主从模式:一台主服务器和一台从服务器,当配置了虚拟vip的主服务器发送故障时,从服务器将自动接管虚拟ip,服务将不会中断.但主服务器不出现故障的时候,从服务器永远处于浪费 ...

  4. 阿里云ECS服务器部署Node.js项目全过程详解

    本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...

  5. 【洛谷P3649】回文串

    题目大意:给定一个长度为 N 的字符串,定义一个变量为该字符串的回文子串长度乘以该字串出现的次数,求这个变量的最大值是多少. 题解:学会了回文自动机. 回文自动机是两棵树组成的森林结构,并通过 fai ...

  6. xml转换为json格式时,如何将指定节点转换成数组 Json.NET

    使用Json.NET转换xml成json时,如果xml只有单个节点,但json要求是数组形式[], JsonConvert.SerializeXmlNode 并不能自动识别 示例如下: RecordA ...

  7. codeforces-1133 (div3)

    A.先全部化成分钟数,取平均数之后化成正常时刻. #include <map> #include <set> #include <ctime> #include & ...

  8. 多输入select

    目录 多输入select IO模型 select介绍 小demo 注意 引入电子书 title: 多输入select date: 2019/3/20 17:21:34 toc: true --- 多输 ...

  9. Maven 学习总结 (五) 之 持续集成、构建web应用

    持续集成的作用.过程和优势 简单说,持续集成就是快速且高频率地自动构建项目的所有源码,并为项目成员提供丰富的反馈信息. 快速:集成的速度要尽可能地快,开发人员不希望自己的代码提交半天之后才得到反馈. ...

  10. 光刻技术的原理和EUV光刻技术前景

    本文转载自微信公众号 半导体技术天地, 链接 https://mp.weixin.qq.com/s/EEBkSQ_Yc8RYFO18VpO8ow