Python爬取指定重量的快遞價格


背景:現在這個時代,快遞橫飛。我們想寄一個快遞,給出的選擇也是多種多樣的(根據快遞的大小、送達的時間、寄送的距離及價格、公司服務質量,來選擇不同的快遞[物流]公司)。往往合適的事情選擇合適的方式,這才是最完美的。

需求:想寄一個大概 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(快遞公司)的價格目錄表,有些便宜的無法想象,有些貴的離譜。當然還是那句話,合適的服務合適的價格才是我們最合適的選擇。



寫在最后: 雖然查詢出了這么多快遞公司,甚至還有些聽都沒聽過,但是這些快遞(物流)公司的的價格也有些偏差。這里又要說到一些快遞公司的亂收取費用的事了,有些公司在官網連個明碼標價的都沒有,個別區域就看心情和情況收費。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM