From 3e42cf08a4221356c20486987f23cff6795f835b Mon Sep 17 00:00:00 2001 From: d8b Date: Wed, 5 Feb 2020 13:39:39 +0800 Subject: [PATCH 1/3] add area param generator --- area_id/README.md | 9 +++++++++ area_id/select_area_id.py | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 area_id/README.md create mode 100644 area_id/select_area_id.py diff --git a/area_id/README.md b/area_id/README.md new file mode 100644 index 0000000..cda759f --- /dev/null +++ b/area_id/README.md @@ -0,0 +1,9 @@ +## area参数自助生成 + +>该脚本能生成下单所需的area参数 + +👉运行脚本,根据提示逐级选择区域即可。 + +```sh +python select_area_id.py +``` \ No newline at end of file diff --git a/area_id/select_area_id.py b/area_id/select_area_id.py new file mode 100644 index 0000000..3d2f8e8 --- /dev/null +++ b/area_id/select_area_id.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import requests +import json + +province = [{'name': '北京', 'value': 1}, {'name': '上海', 'value': 2}, {'name': '天津', 'value': 3}, {'name': '重庆', 'value': 4}, {'name': '河北', 'value': 5}, {'name': '山西', 'value': 6}, {'name': '河南', 'value': 7}, {'name': '辽宁', 'value': 8}, {'name': '吉林', 'value': 9}, {'name': '黑龙江', 'value': 10}, {'name': '内蒙古', 'value': 11}, {'name': '江苏', 'value': 12}, {'name': '山东', 'value': 13}, {'name': '安徽', 'value': 14}, {'name': '浙江', 'value': 15}, {'name': '福建', 'value': 16}, {'name': '湖北', 'value': 17}, {'name': '湖南', 'value': 18}, {'name': '广东', 'value': 19}, {'name': '广西', 'value': 20}, {'name': '江西', 'value': 21}, {'name': '四川', 'value': 22}, {'name': '海南', 'value': 23}, {'name': ' 贵州', 'value': 24}, {'name': '云南', 'value': 25}, {'name': '西藏', 'value': 26}, {'name': '陕西', 'value': 27}, {'name': '甘肃', 'value': 28}, {'name': '青海', 'value': 29}, {'name': '宁夏', 'value': 30}, {'name': '新疆', 'value': 31}, {'name': '台湾', 'value': 32}, {'name': '港澳', 'value': 52993}] + +def get_by_fid(fid): + base_uri = 'https://d.jd.com/area/get' + payload = {'fid':fid} + headers = {'Referer':'https://www.jd.com/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.132 Safari/536.36 Edg/80.0.309.71'} + resp = requests.get(url=base_uri,params=payload,headers=headers) + resp_list = json.loads(resp.text) + return resp_list + +if __name__ == '__main__': + for loc in province: + print('{} 对应的编号为 {}'.format(loc['name'],loc['value'])) + print('-------------------------------------------------') + fid1 = input('请继续输入省份编号:') + city_list = get_by_fid(fid1) + for loc in city_list: + print('{} 对应的编号为 {}'.format(loc['name'],loc['id'])) + print('-------------------------------------------------') + fid2=input('请继续输入市编号:') + district_list = get_by_fid(fid2) + for loc in district_list: + print('{} 对应的编号为 {}'.format(loc['name'],loc['id'])) + print('-------------------------------------------------') + fid3=input('请继续输入县镇编号:') + street_list = get_by_fid(fid3) + if street_list == []: + print('您选择的最终的区域id为:{}_{}_{}'.format(fid1,fid2,fid3)) + exit() + else: + for loc in street_list: + print('{} 对应的编号为 {}'.format(loc['name'],loc['id'])) + fid4 = input('请继续输入街道编号:') + print('-------------------------------------------------') + print('您选择的最终的区域id为:{}_{}_{}_{}'.format(fid1,fid2,fid3,fid4)) + From 365d1328e50455f68b24a749138cfc46e2fc1718 Mon Sep 17 00:00:00 2001 From: Tychxn Date: Wed, 5 Feb 2020 18:46:48 +0800 Subject: [PATCH 2/3] Refactor code --- area_id/get_area_id.py | 86 +++++++++++++++++++++++++++++++++++++++ area_id/select_area_id.py | 42 ------------------- 2 files changed, 86 insertions(+), 42 deletions(-) create mode 100644 area_id/get_area_id.py delete mode 100644 area_id/select_area_id.py diff --git a/area_id/get_area_id.py b/area_id/get_area_id.py new file mode 100644 index 0000000..89053c7 --- /dev/null +++ b/area_id/get_area_id.py @@ -0,0 +1,86 @@ +# !/usr/bin/env python +# -*- coding:utf-8 -*- + +""" +area参数自助生成 +运行脚本,根据提示逐级选择区域即可 +""" + +import json + +import requests + +provinces = [ + {'name': '北京', 'id': 1}, {'name': '上海', 'id': 2}, {'name': '天津', 'id': 3}, + {'name': '重庆', 'id': 4}, {'name': '河北', 'id': 5}, {'name': '山西', 'id': 6}, + {'name': '河南', 'id': 7}, {'name': '辽宁', 'id': 8}, {'name': '吉林', 'id': 9}, + {'name': '黑龙江', 'id': 10}, {'name': '内蒙古', 'id': 11}, {'name': '江苏', 'id': 12}, + {'name': '山东', 'id': 13}, {'name': '安徽', 'id': 14}, {'name': '浙江', 'id': 15}, + {'name': '福建', 'id': 16}, {'name': '湖北', 'id': 17}, {'name': '湖南', 'id': 18}, + {'name': '广东', 'id': 19}, {'name': '广西', 'id': 20}, {'name': '江西', 'id': 21}, + {'name': '四川', 'id': 22}, {'name': '海南', 'id': 23}, {'name': '贵州', 'id': 24}, + {'name': '云南', 'id': 25}, {'name': '西藏', 'id': 26}, {'name': '陕西', 'id': 27}, + {'name': '甘肃', 'id': 28}, {'name': '青海', 'id': 29}, {'name': '宁夏', 'id': 30}, + {'name': '新疆', 'id': 31}, {'name': '台湾', 'id': 32}, {'name': '港澳', 'id': 52993}, + {'name': '钓鱼岛', 'id': 84} +] + + +def get_area_by_id(_id): + base_uri = 'https://d.jd.com/area/get' + payload = {'fid': _id} + resp = requests.get(url=base_uri, params=payload) + return json.loads(resp.text) + + +def print_area(area_list): + for area in area_list: + print('【{}】 {}'.format(area['id'], area['name'])) + print('-------------------------------------------------') + + +def select_area(area_list): + while True: + user_input = input('请继续输入编号:').strip() + selected_area = [area for area in area_list if str(area['id']) == user_input or area['name'] == user_input] + if not selected_area: + print('编号错误,请重新输入') + continue + print('已选择:{}'.format(selected_area[0]['name'])) + return selected_area[0] + + +def main(): + print_area(provinces) + province = select_area(provinces) + + cities = get_area_by_id(province['id']) + print_area(cities) + city = select_area(cities) + + districts = get_area_by_id(city['id']) + print_area(districts) + district = select_area(districts) + + streets = get_area_by_id(district['id']) + if not streets: + print( + '您选择的区域为:{}-{}-{},id:{}_{}_{}'.format( + province['name'], city['name'], district['name'], + province['id'], city['id'], district['id'] + ) + ) + return + + print_area(streets) + street = select_area(streets) + print( + '您选择的区域为:{}-{}-{}-{},id:{}_{}_{}_{}'.format( + province['name'], city['name'], district['name'], street['name'], + province['id'], city['id'], district['id'], street['id'] + ) + ) + + +if __name__ == '__main__': + main() diff --git a/area_id/select_area_id.py b/area_id/select_area_id.py deleted file mode 100644 index 3d2f8e8..0000000 --- a/area_id/select_area_id.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import requests -import json - -province = [{'name': '北京', 'value': 1}, {'name': '上海', 'value': 2}, {'name': '天津', 'value': 3}, {'name': '重庆', 'value': 4}, {'name': '河北', 'value': 5}, {'name': '山西', 'value': 6}, {'name': '河南', 'value': 7}, {'name': '辽宁', 'value': 8}, {'name': '吉林', 'value': 9}, {'name': '黑龙江', 'value': 10}, {'name': '内蒙古', 'value': 11}, {'name': '江苏', 'value': 12}, {'name': '山东', 'value': 13}, {'name': '安徽', 'value': 14}, {'name': '浙江', 'value': 15}, {'name': '福建', 'value': 16}, {'name': '湖北', 'value': 17}, {'name': '湖南', 'value': 18}, {'name': '广东', 'value': 19}, {'name': '广西', 'value': 20}, {'name': '江西', 'value': 21}, {'name': '四川', 'value': 22}, {'name': '海南', 'value': 23}, {'name': ' 贵州', 'value': 24}, {'name': '云南', 'value': 25}, {'name': '西藏', 'value': 26}, {'name': '陕西', 'value': 27}, {'name': '甘肃', 'value': 28}, {'name': '青海', 'value': 29}, {'name': '宁夏', 'value': 30}, {'name': '新疆', 'value': 31}, {'name': '台湾', 'value': 32}, {'name': '港澳', 'value': 52993}] - -def get_by_fid(fid): - base_uri = 'https://d.jd.com/area/get' - payload = {'fid':fid} - headers = {'Referer':'https://www.jd.com/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.132 Safari/536.36 Edg/80.0.309.71'} - resp = requests.get(url=base_uri,params=payload,headers=headers) - resp_list = json.loads(resp.text) - return resp_list - -if __name__ == '__main__': - for loc in province: - print('{} 对应的编号为 {}'.format(loc['name'],loc['value'])) - print('-------------------------------------------------') - fid1 = input('请继续输入省份编号:') - city_list = get_by_fid(fid1) - for loc in city_list: - print('{} 对应的编号为 {}'.format(loc['name'],loc['id'])) - print('-------------------------------------------------') - fid2=input('请继续输入市编号:') - district_list = get_by_fid(fid2) - for loc in district_list: - print('{} 对应的编号为 {}'.format(loc['name'],loc['id'])) - print('-------------------------------------------------') - fid3=input('请继续输入县镇编号:') - street_list = get_by_fid(fid3) - if street_list == []: - print('您选择的最终的区域id为:{}_{}_{}'.format(fid1,fid2,fid3)) - exit() - else: - for loc in street_list: - print('{} 对应的编号为 {}'.format(loc['name'],loc['id'])) - fid4 = input('请继续输入街道编号:') - print('-------------------------------------------------') - print('您选择的最终的区域id为:{}_{}_{}_{}'.format(fid1,fid2,fid3,fid4)) - From 45834f57bedee753b4501a5d8aeaf3435296a54f Mon Sep 17 00:00:00 2001 From: Tychxn Date: Thu, 6 Feb 2020 03:47:40 +0800 Subject: [PATCH 3/3] Docs: update README --- area_id/README.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/area_id/README.md b/area_id/README.md index cda759f..07fe5c2 100644 --- a/area_id/README.md +++ b/area_id/README.md @@ -1,9 +1,25 @@ -## area参数自助生成 +# 地址id如何获取? ->该脚本能生成下单所需的area参数 +## 方法一 -👉运行脚本,根据提示逐级选择区域即可。 +在本文件夹中根据地址查询对应的文件。 + +## 方法二 + +在商品页面(例如 https://item.jd.com/1178879.html) 打开开发者工具,在 Console 中执行以下 Javascript 代码: + +```js +var el = document.getElementsByClassName("ui-area-text")[0] +var area_name = el.getAttribute("title") +var area_id = el.getAttribute("data-id").replace(/-/g, "_") +console.log(area_name) +console.log(area_id) +``` + +## 方法三 + +运行本文件夹中的 Python 脚本,根据提示逐级选择区域。感谢 @6r6 提供脚本~ ```sh -python select_area_id.py -``` \ No newline at end of file +python get_area_id.py +```