上一篇文章我们介绍了geopy的基本使用,这一篇文章我们根据中心点坐标,方向,距中心点距离计算出对应的坐标点,这种用法官网并没有给出详细的文档,我们这里做一下说明

生成坐标点的具体方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import geopy.distance

def get_distance_point(lat, lon, distance, direction):
"""
根据经纬度,距离,方向获得一个地点
:param lat: 纬度
:param lon: 经度
:param distance: 距离(千米)
:param direction: 方向(北:0,东:90,南:180,西:360)
:return:
"""
start = geopy.Point(lat, lon)
d = geopy.distance.VincentyDistance(kilometers=distance)
return d.destination(point=start, bearing=direction)

调用示例

1
2
3
4
5
>>> import geopy
>>> import geopy.distance
>>> p = get_distance_point(39.90733345, 116.391244079988, 8.5, 90)
>>> print (p.latitude, p.longitude)
(39.90729084605293, 116.49064857447016)

geopy是Python关于地理位置的一个第三方库,用这个库来进行地址位置信息的查询和转换非常方便,本文介绍关于geopy的常用的几种用法

geopy的安装

1
pip install geopy

根据地址查询坐标及详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>> import json, logging
>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.geocode("北京天安门")
>>> print location.address
天安门, 1, 西长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国
>>> print (location.latitude, location.longitude)
(39.90733345, 116.391244079988)
>>> print json.dumps(location.raw, indent=4, ensure_ascii=False, encoding='utf8')
{
"display_name": "天安门, 1, 西长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国",
"importance": 0.00025,
"place_id": "74005413",
"lon": "116.391244079988",
"lat": "39.90733345",
"osm_type": "way",
"licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
"osm_id": "25097203",
"boundingbox": [
"39.9072273",
"39.9075343",
"116.3906566",
"116.3918428"
],
"type": "yes",
"class": "building"
}

根据坐标信息查询地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
>>> import json, logging
>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.reverse("39.90733345,116.391244079988")
>>> print location.address
天安门, 1, 西长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国
>>> print json.dumps(location.raw, indent=4, ensure_ascii=False, encoding='utf8')
{
"display_name": "天安门, 1, 西长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国",
"place_id": "74005413",
"lon": "116.391244079988",
"boundingbox": [
"39.9072273",
"39.9075343",
"116.3906566",
"116.3918428"
],
"osm_type": "way",
"licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
"osm_id": "25097203",
"lat": "39.90733345",
"address": {
"building": "天安门",
"city": "北京市",
"house_number": "1",
"country": "中国",
"suburb": "东城区",
"state": "北京市",
"postcode": "100010",
"country_code": "cn",
"road": "西长安街"
}
}

中国城市线级及市中心经纬度表

线级 省份 城市 纬度 经度
重要 上海 上海市 31.24916171 121.487899486
重要 北京 北京市 39.90733345 116.391244079988
重要 广东省 广州市 23.1200491021 113.307649675
重要 广东省 深圳市 22.5460535462 114.025973657
一线 四川省 成都市 30.6799428454 104.067923463
一线 天津 天津市 39.1439299033 117.210813092
一线 山东省 青岛市 36.1052149013 120.384428184
一线 广东省 东莞市 23.0430238154 113.763433991
一线 江苏省 南京市 32.0572355018 118.778074408
一线 江苏省 苏州市 31.317987368 120.619907115
一线 河南省 郑州市 34.7566100641 113.64964385
一线 浙江省 宁波市 29.8852589659 121.579005973
一线 浙江省 杭州市 30.2592444615 120.219375416
一线 湖北省 武汉市 30.5810841269 114.316200103
一线 湖南省 长沙市 28.2134782309 112.979352788
一线 辽宁省 大连市 38.9487099383 121.593477781
一线 辽宁省 沈阳市 41.8086447835 123.432790922
一线 重庆 重庆市 29.5446061089 106.530635013
一线 陕西省 西安市 34.2777998978 108.953098279
二线 云南省 昆明市 25.0491531005 102.714601139
二线 吉林省 长春市 43.8983376071 125.313642427
二线 安徽省 合肥市 31.8669422607 117.282699092
二线 山东省 济南市 36.6827847272 117.024967066
二线 山东省 烟台市 37.5365615629 121.30955503
二线 山西省 太原市 37.890277054 112.550863589
二线 广东省 中山市 22.5451775145 113.422060021
二线 广东省 佛山市 23.0350948405 113.134025635
二线 广东省 惠州市 23.1135398524 114.41065808
二线 广东省 珠海市 22.2569146461 113.562447026
二线 广西壮族自治区 南宁市 22.8064929356 108.297233556
二线 新疆维吾尔自治区 乌鲁木齐市 43.8403803472 87.5649877411
二线 江苏省 南通市 32.0146645408 120.873800951
二线 江苏省 常州市 31.7713967447 119.981861013
二线 江苏省 徐州市 34.2715534311 117.188106623
二线 江苏省 无锡市 31.5700374519 120.305455901
二线 江西省 南昌市 28.6895780001 115.893527546
二线 河北省 石家庄市 38.0489583146 114.522081844
二线 浙江省 台州市 28.6682832857 121.440612936
二线 浙江省 嘉兴市 30.7739922396 120.760427699
二线 浙江省 温州市 28.002837594 120.690634734
二线 浙江省 绍兴市 30.0023645805 120.592467386
二线 浙江省 金华市 29.1028991054 119.652575704
二线 海南省 海口市 20.022071277 110.330801848
二线 甘肃省 兰州市 36.064225525 103.823305441
二线 福建省 厦门市 24.4892306125 118.103886046
二线 福建省 泉州市 24.901652384 118.600362343
二线 福建省 福州市 26.0471254966 119.330221107
二线 贵州省 贵阳市 26.6299067414 106.709177096
二线 黑龙江省 哈尔滨市 45.7732246332 126.657716855
三线 云南省 丽江市 26.8753510895 100.229628399
三线 内蒙古自治区 包头市 40.6471194257 109.846238532
三线 内蒙古自治区 呼和浩特市 40.8283188731 111.66035052
三线 吉林省 吉林市 43.8719883344 126.564543989
三线 吉林省 延边朝鲜族自治州 42.8964136037 129.485901958
三线 四川省 南充市 30.8009651682 106.105553984
三线 四川省 绵阳市 31.5047012581 104.705518975
三线 宁夏回族自治区 银川市 38.5026210119 106.206478608
三线 安徽省 芜湖市 31.3660197875 118.384108423
三线 安徽省 蚌埠市 32.9294989067 117.357079866
三线 安徽省 马鞍山市 31.6885281589 118.515881847
三线 山东省 东营市 37.4871211553 118.583926333
三线 山东省 临沂市 35.0724090744 118.340768237
三线 山东省 威海市 37.5287870813 122.093958366
三线 山东省 泰安市 36.1880777589 117.089414917
三线 山东省 济宁市 35.4021216643 116.600797625
三线 山东省 淄博市 36.8046848542 118.059134278
三线 山东省 潍坊市 36.7161148731 119.142633823
三线 广东省 揭阳市 23.5479994669 116.379500855
三线 广东省 汕头市 23.3839084533 116.728650288
三线 广东省 江门市 22.5751167835 113.078125341
三线 广东省 清远市 23.6984685504 113.040773349
三线 广东省 湛江市 21.2574631038 110.365067263
三线 广东省 肇庆市 23.0786632829 112.47965337
三线 广西壮族自治区 柳州市 24.3290533525 109.42240181
三线 广西壮族自治区 桂林市 25.262901246 110.260920147
三线 江苏省 扬州市 32.4085052546 119.427777551
三线 江苏省 泰州市 32.4760532748 119.919606016
三线 江苏省 淮安市 33.6065127393 119.030186365
三线 江苏省 33.3798618771 120.148871818
三线 江苏省 连云港市 34.601548967 119.173872217
三线 江苏省 镇江市 32.2044094436 119.455835405
三线 江西省 上饶市 28.4576225539 117.955463877
三线 江西省 九江市 29.7196395261 115.999848022
三线 江西省 赣州市 25.8452955363 114.935909079
三线 河北省 保定市 38.886564548 115.494810169
三线 河北省 唐山市 39.6505309225 118.183450598
三线 河北省 廊坊市 39.5186106251 116.703602223
三线 河北省 沧州市 38.2976153503 116.863806476
三线 河北省 秦皇岛市 39.9454615659 119.604367616
三线 河北省 邯郸市 36.6093079285 114.482693932
三线 河南省 南阳市 33.0114195691 112.542841901
三线 河南省 洛阳市 34.6573678177 112.447524769
三线 浙江省 丽水市 28.4562995521 119.929575843
三线 浙江省 湖州市 30.8779251557 120.137243163
三线 浙江省 舟山市 30.0360103026 122.169872098
三线 浙江省 衢州市 28.9569104475 118.875841652
三线 海南省 三亚市 18.2577759149 109.522771281
三线 湖北省 孝感市 30.9279547842 113.935734392
三线 湖北省 宜昌市 30.732757818 111.310981092
三线 湖北省 荆州市 30.332590523 112.241865807
三线 湖北省 襄阳市 32.2291685915 112.250092848
三线 湖南省 岳阳市 29.3780070755 113.146195519
三线 湖南省 株洲市 27.8274329277 113.131695341
三线 湖南省 衡阳市 26.8981644154 112.583818811
三线 福建省 三明市 26.2708352794 117.642193934
三线 福建省 南平市 26.6436264742 118.181882949
三线 福建省 宁德市 26.6565274192 119.54208215
三线 福建省 漳州市 24.5170647798 117.676204679
三线 福建省 莆田市 25.4484501367 119.077730964
三线 福建省 龙岩市 25.0786854335 117.017996739
三线 辽宁省 丹东市 40.1290228266 124.338543115
三线 辽宁省 抚顺市 41.8773038296 123.929819767
三线 辽宁省 盘锦市 41.141248023 122.07322781
三线 辽宁省 营口市 40.6686510665 122.233391371
三线 辽宁省 鞍山市 41.1187436822 123.007763329
三线 陕西省 咸阳市 34.345372996 108.707509278
三线 青海省 西宁市 36.640738612 101.76792099
三线 黑龙江省 大庆市 46.59670902 125.02183973
三线 黑龙江省 齐齐哈尔市 47.3476998134 123.987288942
四线 云南省 大理白族自治州 25.5968996394 100.223674789
四线 云南省 曲靖市 25.5207581429 103.782538888
四线 云南省 玉溪市 24.3704471344 102.545067892
四线 云南省 红河哈尼族彝族自治州 23.3677175165 103.384064757
四线 云南省 西双版纳傣族自治州 22.0094330022 100.803038275
四线 内蒙古自治区 呼伦贝尔市 49.2016360546 119.760821794
四线 内蒙古自治区 赤峰市 42.2971123203 118.930761192
四线 内蒙古自治区 通辽市 43.633756073 122.260363263
四线 内蒙古自治区 鄂尔多斯市 39.8164895606 109.993706251
四线 吉林省 四平市 43.1755247011 124.391382074
四线 吉林省 通化市 41.7363971299 125.942650139
四线 四川省 乐山市 29.6009576111 103.760824239
四线 四川省 内江市 29.5994615348 105.073055992
四线 四川省 宜宾市 28.7696747963 104.633019062
四线 四川省 德阳市 31.1311396527 104.402397818
四线 四川省 泸州市 28.8959298039 105.443970289
四线 四川省 眉山市 30.0611150799 103.841429563
四线 四川省 遂宁市 30.5574913504 105.564887792
四线 四川省 雅安市 29.9997163371 103.009356466
四线 安徽省 六安市 31.7555583552 116.505252683
四线 安徽省 安庆市 30.5378978174 117.058738772
四线 安徽省 30.9516423543 118.752096311
四线 安徽省 宿州市 33.6367723858 116.988692412
四线 安徽省 淮南市 32.6428118237 117.018638863
四线 安徽省 滁州市 32.3173505954 118.324570351
四线 安徽省 阜阳市 32.9012113306 115.820932259
四线 安徽省 黄山市 29.7344348562 118.293569632
四线 山东省 德州市 37.4608259263 116.328161364
四线 山东省 日照市 35.4202251931 119.507179943
四线 山东省 枣庄市 34.8078830784 117.279305383
四线 山东省 滨州市 37.4053139418 117.968292415
四线 山东省 36.4558285147 115.986869139
四线 山东省 菏泽市 35.2624404961 115.463359775
四线 山西省 临汾市 36.0997454436 111.538787596
四线 山西省 大同市 40.1137444997 113.290508673
四线 山西省 晋中市 37.6933615268 112.7385144
四线 山西省 35.0388594798 111.006853653
四线 广东省 梅州市 24.304570606 116.126403098
四线 广东省 汕尾市 22.7787305002 115.372924289
四线 广东省 河源市 23.7572508505 114.713721476
四线 广东省 潮州市 23.6618116765 116.630075991
四线 广东省 茂名市 21.6682257188 110.931245331
四线 广东省 阳江市 21.8715173045 111.977009756
四线 广东省 韶关市 24.8029603119 113.594461107
四线 广西壮族自治区 北海市 21.472718235 109.122627919
四线 广西壮族自治区 梧州市 23.4853946367 111.30547195
四线 广西壮族自治区 玉林市 22.6439736084 110.151676316
四线 江苏省 宿迁市 33.9520497337 118.296893379
四线 江西省 吉安市 27.1138476502 114.992038711
四线 江西省 宜春市 27.8111298958 114.400038672
四线 江西省 抚州市 27.9545451703 116.360918867
四线 江西省 景德镇市 29.3035627684 117.186522625
四线 河北省 张家口市 40.8111884911 114.89378153
四线 河北省 承德市 40.9925210525 117.933822456
四线 河北省 邢台市 37.0695311969 114.520486813
四线 河南省 信阳市 32.1285823075 114.085490993
四线 河南省 周口市 33.6237408181 114.654101942
四线 河南省 商丘市 34.4385886402 115.641885688
四线 河南省 安阳市 36.1102667222 114.351806508
四线 河南省 平顶山市 33.7453014565 113.300848978
四线 河南省 开封市 34.8018541758 114.351642118
四线 河南省 新乡市 35.3072575577 113.912690161
四线 河南省 焦作市 35.234607555 113.211835885
四线 河南省 许昌市 34.0267395887 113.83531246
四线 河南省 驻马店市 32.9831581541 114.049153547
四线 湖北省 十堰市 32.6369943395 110.801228917
四线 湖北省 咸宁市 29.8806567577 114.300060592
四线 湖北省 恩施土家族苗族自治州 30.2858883166 109.491923304
四线 湖北省 黄冈市 30.4461089379 114.906618047
四线 湖北省 黄石市 30.2161271277 115.050683164
四线 湖南省 娄底市 27.7410733023 111.996396357
四线 湖南省 常德市 29.0121488552 111.653718137
四线 湖南省 怀化市 27.5574829012 109.986958796
四线 湖南省 湘潭市 27.835095053 112.935555633
四线 湖南省 邵阳市 27.2368112449 111.461525404
四线 湖南省 郴州市 25.7822639757 113.037704468
四线 贵州省 遵义市 27.6999613771 106.931260316
四线 贵州省 黔东南苗族侗族自治州 26.5839917665 107.985352573
四线 贵州省 黔南布依族苗族自治州 26.2645359974 107.52320511
四线 辽宁省 本溪市 41.3258376266 123.77806237
四线 辽宁省 葫芦岛市 40.7430298813 120.860757645
四线 辽宁省 辽阳市 41.2733392656 123.172451205
四线 辽宁省 铁岭市 42.2997570121 123.854849615
四线 辽宁省 锦州市 41.1308788759 121.147748738
四线 辽宁省 阜新市 42.0192501071 121.660822129
四线 陕西省 宝鸡市 34.3640808097 107.170645452
四线 陕西省 榆林市 38.2794392401 109.745925744
四线 陕西省 渭南市 34.5023579758 109.483932697
四线 黑龙江省 佳木斯市 46.8137796047 130.284734586
四线 黑龙江省 牡丹江市 44.5885211528 129.608035396
五线 云南省 临沧市 23.8878061038 100.092612914
五线 云南省 保山市 25.1204891962 99.1779956133
五线 云南省 德宏傣族景颇族自治州 24.441239663 98.5894342874
五线 云南省 怒江傈僳族自治州 25.8606769782 98.8599320425
五线 云南省 文山壮族苗族自治州 23.3740868504 104.246294318
五线 云南省 昭通市 27.3406329636 103.725020656
五线 云南省 普洱市 22.7887777801 100.98005773
五线 云南省 楚雄彝族自治州 25.0663556742 101.529382239
五线 云南省 迪庆藏族自治州 27.8310294612 99.7136815989
五线 内蒙古自治区 乌兰察布市 41.0223629468 113.112846391
五线 内蒙古自治区 乌海市 39.6831770068 106.831999097
五线 内蒙古自治区 兴安盟 46.0837570652 122.048166514
五线 内蒙古自治区 巴彦淖尔市 40.7691799024 107.42380672
五线 内蒙古自治区 锡林郭勒盟 43.9397048423 116.027339689
五线 内蒙古自治区 阿拉善盟 38.8430752644 105.695682871
五线 吉林省 松原市 45.1360489701 124.832994532
五线 吉林省 45.6210862752 122.840776679
五线 吉林省 白山市 41.945859397 126.435797675
五线 吉林省 辽源市 42.9233026191 125.133686052
五线 四川省 凉山彝族自治州 27.8923929037 102.259590803
五线 四川省 巴中市 31.8691891592 106.757915842
五线 四川省 广元市 32.4410401584 105.81968694
五线 四川省 广安市 30.4639838879 106.635720331
五线 四川省 攀枝花市 26.5875712571 101.722423152
五线 四川省 甘孜藏族自治州 30.0551441144 101.969232063
五线 四川省 自贡市 29.3591568895 104.776071339
五线 四川省 资阳市 30.132191434 104.635930302
五线 四川省 达州市 31.2141988589 107.494973447
五线 四川省 阿坝藏族羌族自治州 31.9057628583 102.228564689
五线 宁夏回族自治区 中卫市 37.5211241916 105.196754199
五线 宁夏回族自治区 吴忠市 37.9935610029 106.208254199
五线 宁夏回族自治区 固原市 36.0215234807 106.285267996
五线 宁夏回族自治区 石嘴山市 39.0202232836 106.379337202
五线 安徽省 亳州市 33.8712105653 115.787928245
五线 安徽省 池州市 30.6600192482 117.494476772
五线 安徽省 淮北市 33.9600233054 116.791447429
五线 安徽省 铜陵市 30.9409296947 117.819428729
五线 山东省 莱芜市 36.2336541336 117.684666912
五线 山西省 吕梁市 37.527316097 111.143156602
五线 山西省 忻州市 38.461030573 112.727938829
五线 山西省 35.4998344672 112.867332758
五线 山西省 朔州市 39.3376719662 112.479927727
五线 山西省 长治市 36.2016643857 113.120292086
五线 山西省 阳泉市 37.8695294932 113.569237602
五线 广东省 云浮市 22.9379756855 112.050945959
五线 广西壮族自治区 崇左市 22.4154552965 107.357322038
五线 广西壮族自治区 来宾市 23.7411659265 109.231816505
五线 广西壮族自治区 河池市 24.6995207829 108.069947709
五线 广西壮族自治区 百色市 23.9015123679 106.631821404
五线 广西壮族自治区 贵港市 23.1033731644 109.613707557
五线 广西壮族自治区 贺州市 24.4110535471 111.552594179
五线 广西壮族自治区 钦州市 21.9733504653 108.638798056
五线 广西壮族自治区 防城港市 21.6173984705 108.351791153
五线 新疆维吾尔自治区 伊犁哈萨克自治州 43.9222480963 81.2978535304
五线 新疆维吾尔自治区 克孜勒苏柯尔克孜自治州 39.7503455778 76.1375644775
五线 新疆维吾尔自治区 克拉玛依市 45.5943310667 84.8811801861
五线 新疆维吾尔自治区 博尔塔拉蒙古自治州 44.9136513743 82.0524362672
五线 新疆维吾尔自治区 吐鲁番市 42.94974316 89.18669353
五线 新疆维吾尔自治区 和田地区 37.1167744927 79.9302386372
五线 新疆维吾尔自治区 哈密市 42.81703415 93.51378141
五线 新疆维吾尔自治区 喀什地区 39.4706271887 75.9929732675
五线 新疆维吾尔自治区 塔城地区 46.7586836297 82.9748805837
五线 新疆维吾尔自治区 巴音郭楞蒙古自治州 41.7625397 86.14252513
五线 新疆维吾尔自治区 昌吉回族自治州 44.0070578985 87.2960381257
五线 新疆维吾尔自治区 阿克苏地区 41.1717309015 80.2698461793
五线 新疆维吾尔自治区 阿勒泰地区 47.8397444862 88.1379154871
五线 江西省 新余市 27.8223215586 114.947117417
五线 江西省 萍乡市 27.639544223 113.859917033
五线 江西省 鹰潭市 28.2413095972 117.035450186
五线 河北省 衡水市 37.7469290459 115.686228653
五线 河南省 三门峡市 34.7833199411 111.181262093
五线 河南省 漯河市 33.5762786885 114.0460614
五线 河南省 濮阳市 35.7532978882 115.026627441
五线 河南省 鹤壁市 35.7554258742 114.297769838
五线 海南省 三沙市 16.840062894 112.350383075
五线 海南省 儋州市 19.52289649 109.57667231
五线 湖北省 荆门市 31.0426112029 112.217330299
五线 湖北省 鄂州市 30.3844393228 114.895594041
五线 湖北省 随州市 31.7178576082 113.379358364
五线 湖南省 张家界市 29.1248893532 110.481620157
五线 湖南省 永州市 26.4359716468 111.614647686
五线 湖南省 湘西土家族苗族自治州 28.3179507937 109.7457458
五线 湖南省 益阳市 28.5880877799 112.366546645
五线 甘肃省 临夏回族自治州 35.5985143488 103.215249178
五线 甘肃省 嘉峪关市 39.8023973267 98.2816345853
五线 甘肃省 天水市 34.5843194189 105.736931623
五线 甘肃省 定西市 35.5860562418 104.626637601
五线 甘肃省 平凉市 35.55011019 106.688911157
五线 甘肃省 庆阳市 35.7268007545 107.644227087
五线 甘肃省 张掖市 38.939320297 100.459891869
五线 甘肃省 武威市 37.9331721429 102.640147343
五线 甘肃省 甘南藏族自治州 34.9922111784 102.917442486
五线 甘肃省 白银市 36.5466817062 104.171240904
五线 甘肃省 酒泉市 39.7414737682 98.5084145062
五线 甘肃省 金昌市 38.5160717995 102.208126263
五线 甘肃省 陇南市 33.3944799729 104.934573406
五线 西藏自治区 山南市 29.24009053 91.77186941
五线 西藏自治区 拉萨市 29.6625570621 91.111890896
五线 西藏自治区 日喀则市 29.27026627 88.8790711
五线 西藏自治区 昌都市 31.1377727145 97.178911139
五线 西藏自治区 林芝市 29.65162511 94.36036694
五线 西藏自治区 那曲地区 31.4806798301 92.0670183689
五线 西藏自治区 阿里地区 30.4045565883 81.1076686895
五线 贵州省 六盘水市 26.5918660603 104.85208676
五线 贵州省 安顺市 26.2285945777 105.928269966
五线 贵州省 毕节市 27.4085621313 105.333323371
五线 贵州省 铜仁市 27.6749026906 109.168558028
五线 贵州省 黔西南布依族苗族自治州 25.0951480559 104.900557798
五线 辽宁省 朝阳市 41.5718276679 120.446162703
五线 陕西省 商洛市 33.8739073951 109.934208154
五线 陕西省 安康市 32.70437045 109.038044563
五线 陕西省 延安市 36.6033203523 109.500509757
五线 陕西省 汉中市 33.0815689782 107.045477629
五线 陕西省 铜川市 34.9083676964 108.968067013
五线 青海省 果洛藏族自治州 34.4804845846 100.223722769
五线 青海省 海东市 36.48200757 102.39968314
五线 青海省 海北藏族自治州 36.9606541011 100.879802174
五线 青海省 海南藏族自治州 36.2843638038 100.624066094
五线 青海省 海西蒙古族藏族自治州 37.3737990706 97.3426254153
五线 青海省 玉树藏族自治州 33.0062399097 97.0133161374
五线 青海省 黄南藏族自治州 35.5228515517 102.007600308
五线 黑龙江省 七台河市 45.7750053686 131.019048047
五线 黑龙江省 伊春市 47.7346850751 128.910765978
五线 黑龙江省 双鸭山市 46.6551020625 131.17140174
五线 黑龙江省 绥化市 46.646063927 126.989094572
五线 黑龙江省 鸡西市 45.3215398866 130.941767273
五线 黑龙江省 鹤岗市 47.3386659037 130.292472051
五线 黑龙江省 黑河市 50.2506900907 127.500830295

Mac上从官方安装完Mysql5.7后,有一部分的字符集默认为latin1,而非utf8,为避免乱码的产生,本文介绍将所有字符集设置为utf8

查看当前字符集编码

1
show variables like '%char%';

我们会发现这些字符集为latin1

修改字符集为utf8

  1. 关闭Mysql服务
  2. 新建一个my.cnf配置文件,执行下面命令,如果已存在则会打开该文件
1
sudo vim /etc/my.cnf
  1. 按i键进入编辑模式并加入以下配置,然后按esc键退出编辑模式并按shift+zz保存
1
2
3
4
5
6
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
  1. 启动Mysql服务,查看编码,成功

爬虫工具Scrapy在Mac和Linux环境下都相对好装,但是在Windows上总会碰到各种莫名其妙的问题。本文记录下Scrapy在Window上的安装过程。
本文是基于Python2.7及Windows 10安装Scrapy及各种爬虫相关库。

下载安装Scrapy

Scrapy官方文档

  1. 按照官网建议下载安装Anaconda,使用这个安装比直接pip安装会少很多问题。
    下载地址

  2. 安装完成后,python2.7也会自动安装好,然后执行以下命令安装Scrapy.

1
conda install -c conda-forge scrapy

安装mysql驱动

  1. 下载并安装mysql官方的驱动程序。下载地址

  2. 下载mysql的python驱动程序,可以把两个都装上,使用的时候再决定用哪个。

  • MySQL官方的纯Python驱动
1
pip install mysql-connector-python
  • 封装了MySQL C驱动的Python驱动

    1. 安装Python版C++编译程序。下载地址

    2. 拷贝mysql驱动(32位不需要这一步),将”C:\Program Files\MySQL” 拷贝到 “C:\Program Files (x86)\MySQL”。
      目的是为了防止下一步的错误”Cannot open include file: ‘config-win.h’: No such file or directory”

    3. 安装驱动

      1
      pip install MySQL-python
    4. 安装数据库连接池工具

      1
      pip install DBUtils

安装其它相关的依赖库

安装BeautifulSoup

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。

1
pip install beautifulsoup4

安装PyQuery

PyQuery库也是一个非常强大又灵活的网页解析库。

1
pip install pyquery

Charles介绍

Charles是一款强大的http/https抓包工具,可以抓取各种数据请求,查看请求的头信息,请求信息,返回信息等。本文主要介绍Charles的破解过程,包括Windows平台和Mac平台。

破解文件下载

点击这里下载

Windows平台

  1. 到官网下载最新版,然后安装到本机。官网下载地址

  2. 下载上面的破解文件

  3. 打开Charles的安装文件夹进入到lib文件夹下面,将破解文件复制过来替换掉原文件。

Mac平台

  1. 到官网下载最新版,然后安装到本机。官网下载地址

  2. 下载上面的破解文件

  3. 打开Finder,在应用程序中选择Charles并右键选择显示包内容:

  4. 显示包内容后在Content/Java目录下将破解文件复制过来替换掉原文件即可:

  5. 如果打开Charles时提示”程序已损坏,打不开。您应该将它移到废纸篓。”

    此时需要在终端中执行以下命令即可:

    1
    sudo spctl --master-disable

总结

至此,Charles破解完毕,在进行抓包的过程中,抓取http没有什么问题,但是抓取Https就不那么容易了,抓取Https可以参考这篇文章:
使用Charles对Android App的https请求进行抓包

本文背景

公司新项目要求抓取目前市面上一些热门App的数据,经过研究发现很多App的网络请求都使用https进行数据传输,这样问题就来了,http使用明文传输所有请求都能拦截到,而https请求无法拦截。
所以这里我们要使用Charles来抓取https,但是笔者看了网上很多使用iOS设备进行抓取https的文章,经测试iOS8/10/11均无法进行正常抓取,即使信任证书也不行。
经过笔者的不断尝试,终于在Android5.0上成功抓取了https。研究后发现,在Android7.0以下可以正常使用Charles抓取。Android7.0以上应该是默认屏蔽了此种方法。

Charles安装

Charles配置

配置电脑端的根证书

  1. 打开Charles,我这里使用的是v4.2.5版本:

  2. 安装根证书

  3. Mac需要设置信任证书

    1. 安装后会弹出钥匙串访问界面,如图:

    2. 双击证书,弹出证书详细界面,点击『信任』选项,然后将所有设置为始终信任,如图:

在手机端配置根证书

  1. 在电脑端选择安装移动端的证书:

  2. 选择后会显示IP与端口号,用于手机设置http代理:

  3. 手机的网络上设置成电脑的http代理:
    此时必须保证手机和电脑在同一网络,并且手机可以访问电脑的ip与端口

  4. 设置完成后访问网络时,服务端会弹出提示,点击Allow(同意连接):

  5. 手机浏览器(笔者使用Chrome)访问chls.pro/ssl,下载证书并安装(证书名任意):

配置电脑端的抓取规则

  1. 进入Charles的SSL代理设置:

2.勾上启动SSL代理,并添加一个抓取规则,比如这里加上一个抓取所有https(443端口)的请求:

3.此时手机上打开https请求的应用,应该就可以正常看到https请求的数据了:如图:

常见问题

1. 配置好后无法打开APP

在我们抓取时碰到个别APP在配置代理后无法打开,这个主要是因为该APP做了防止抓取处理,比如校验https的证书是否合法等,这种解决方法可以通过反编译APP,查看源码解决,难度较大。

2. 抓取到的内容为乱码

有的APP为了防止抓取,在返回的内容上做了层加密,所以从Charles上看到的内容是乱码。这种情况下也只能反编译APP,研究其加密解密算法进行解密。