用python计算邮费重量不同_Python爬取指定重量的快递价格

[TOC]

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

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

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

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

一、获取查询接口

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

3fc17e5f1754b57223ed31f790ab3842a31.png

二、获取相关数据

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

967677-20180812220156129-1953950378.png

三、编写爬虫脚本

使用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(快递公司)的价格目录表,有些便宜的无法想象,有些贵的离谱。当然还是那句话,合适的服务合适的价格才是我们最合适的选择。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值