欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫 > python爬蟲之教你如何爬取地理數(shù)據(jù)

python爬蟲之教你如何爬取地理數(shù)據(jù)

熱門標(biāo)簽:上海機(jī)器人外呼系統(tǒng)哪家好 315電話機(jī)器人廣告 南京銷售外呼系統(tǒng)軟件 地圖標(biāo)注的意義點(diǎn) 浙江電銷卡外呼系統(tǒng)好用嗎 房產(chǎn)電銷外呼系統(tǒng) 蓋州市地圖標(biāo)注 地圖制圖標(biāo)注位置改變是移位嗎 地圖標(biāo)注微信發(fā)送位置不顯示

一、shapely模塊

1、shapely

shapely是python中開源的針對空間幾何進(jìn)行處理的模塊,支持點(diǎn)、線、面等基本幾何對象類型以及相關(guān)空間操作。

2、point→Point類

curve→LineString和LinearRing類;
surface→Polygon類
集合方法分別對應(yīng)MultiPoint、MultiLineString、MultiPolygon

3、導(dǎo)入所需模塊

# 導(dǎo)入所需模塊
from shapely import geometry as geo
from shapely import wkt
from shapely import ops
import numpy as np
from shapely.geometry.polygon import LinearRing
from shapely.geometry import Polygon
from shapely.geometry import asPoint, asLineString, asMultiPoint, asPolygon

4、Point

(1)、創(chuàng)建point,主要有以下三種方法

# 創(chuàng)建point
pt1 = geo.Point([0,0])
coord = np.array([0,1])
pt2 = geo.Point(coord)
pt3 = wkt.loads("POINT(1 1)")
geo.GeometryCollection([pt1, pt2, pt3]) #批量可視化

最終三個(gè)點(diǎn)的結(jié)果如下所示:

(2)、point常用屬性

# point常用屬性
print(pt1.x) #pt1的x坐標(biāo)
print(pt1.y)#pt1的y坐標(biāo)
print(list(pt1.coords)) 
print(np.array(pt1))

輸出結(jié)果如下:

0.0
0.0
[(0.0, 0.0)]
[0. 0.]

(3)、point常用方法,計(jì)算距離

# point計(jì)算距離
d = pt2.distance(pt1) #計(jì)算pt1與pt2的距離, d =1.0

5、LineString

創(chuàng)建LineString主要有以下三種方法:

# LineString的創(chuàng)建
line1 = geo.LineString([(0,0),(1,-0.1),(2,0.1),(3,-0.1),(5,0.1),(7,0)])
arr = np.array([(2, 2), (3, 2), (4, 3)])
line2 = geo.LineString(arr)
line3 = wkt.loads("LineString(-2 -2,4 4)")

line1, line2, line3對應(yīng)的直線如下所示

LineString常用方法:

print(line2.length) #計(jì)算線段長度:2.414213562373095
print(list(line2.coords)) #線段中點(diǎn)的坐標(biāo):[(2.0, 2.0), (3.0, 2.0), (4.0, 3.0)]
print(np.array(line2)) #將點(diǎn)坐標(biāo)轉(zhuǎn)成numpy.array形式[[2. 2.],[3. 2.],[4. 3.]]
print(line2.bounds)#坐標(biāo)范圍:(2.0, 2.0, 4.0, 3.0)
center = line2.centroid #幾何中心:
geo.GeometryCollection([line2, center])
bbox = line2.envelope #最小外接矩形
geo.GeometryCollection([line2, bbox])

rect = line2.minimum_rotated_rectangle #最小旋轉(zhuǎn)外接矩形
geo.GeometryCollection([line2, rect])

line2幾何中心:

line2的最小外接矩形:

line2的最小旋轉(zhuǎn)外接矩形:

#常用方法
d1 = line1.distance(line2) #線線距離: 1.9
d2 = line1.distance(geo.Point([-1, 0])) #點(diǎn)線距離:1.0
d3 = line1.hausdorff_distance(line2) #最大最小距離:4.242640687119285
#插值
pt_half = line1.interpolate(0.5, normalized = True)
geo.GeometryCollection([line1,pt_half])

#投影
ratio = line1.project(pt_half, normalized = True)
print(ratio)#project()方法是和interpolate方法互逆的:0.5

插值:

DouglasPucker算法:道格拉斯-普克算法:是將曲線近似表示為一系列點(diǎn),并減少點(diǎn)的數(shù)量的一種算法。

#DouglasPucker算法
line1 = geo.LineString([(0, 0), (1, -0.2), (2, 0.3), (3, -0.5), (5, 0.2), (7,0)])
line1_simplify = line1.simplify(0.4, preserve_topology=False)
print(line1)#LINESTRING (0 0, 1 -0.1, 2 0.1, 3 -0.1, 5 0.1, 7 0)
print(line1_simplify)#LINESTRING (0 0, 2 0.3, 3 -0.5, 5 0.2, 7 0)
buffer_with_circle = line1.buffer(0.2) #端點(diǎn)按照半圓擴(kuò)展
geo.GeometryCollection([line1,buffer_with_circle])

道格拉斯-普克算法化簡后的結(jié)果

6、LineRing:(是一個(gè)封閉圖形)

#LinearRing是一個(gè)封閉圖形
ring = LinearRing([(0, 0), (1, 1), (1, 0)])
print(ring.length)#相比于剛才的LineString的代碼示例,其長度現(xiàn)在是3.41,是因?yàn)槠湫蛄惺情]合的
print(ring.area):結(jié)果為0
geo.GeometryCollection([ring])

7、Polygon:(多邊形)

polygonl = Polygon([(0, 0), (1, 1), (1, 0)])
ext = [(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]
int1 = [(1, 0), (0.5, 0.5), (1, 1), (1.5, 0.5), (1, 0)]
polygon2 = Polygon(ext, [int1])
print(polygonl.area)#幾何對象的面積:0.5
print(polygonl.length)#幾何對象的周長:3.414213562373095
print(polygon2.area)#其面積是ext的面積減去int的面積:3.5
print(polygon2.length)#其長度是ext的長度加上int的長度:10.82842712474619
print(np.array(polygon2.exterior)) #外圍坐標(biāo)點(diǎn):
#[[0. 0.]
 #[0. 2.]
 #[2. 2.]
 #[2. 0.]
# [0. 0.]]
geo.GeometryCollection([polygon2])

8、幾何對象的關(guān)系:內(nèi)部、邊界與外部

#obj.contains(other) == other.within(obj)
coords = [(0, 0), (1, 1)]
print(geo.LineString(coords).contains(geo.Point(0.5, 0.5)))#包含:True

print(geo.LineString(coords).contains(geo.Point(1, 1)))#False
polygon1 = Polygon([(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)])
print(polygon1.contains(geo.LineString([(1.0, 1.0), (1.0, 0)])))#面與線關(guān)系:True
#contains方法也可以擴(kuò)展到面與線的關(guān)系以及面與面的關(guān)系
geo.GeometryCollection([polygon1, geo.LineString([(1.0, 1.0), (1.0, 0)])])

#obj.crosses(other):相交與否
print(geo.LineString(coords).crosses(geo.LineString([(0, 1), (1, 0)])))#:True
geo.GeometryCollection([geo.LineString(coords), geo.LineString([(0, 1), (1, 0)])])
#obj.disjoint(other):均不相交返回True
print(geo.Point(0, 0).disjoint(geo.Point(1, 1)))
#object.intersects(other)如果該幾何對象與另一個(gè)幾何對象只要相交則返回True。
print(geo.LineString(coords).intersects(geo.LineString([(0, 1), (1, 0)])))#True

#object.convex_hull返回包含對象中所有點(diǎn)的最小凸多邊形(凸包)
points1 = geo.MultiPoint([(0, 0), (1, 1), (0, 2), (2, 2), (3, 1), (1, 0)])
hull1 = points1.convex_hull
geo.GeometryCollection([hull1, points1])

#object.intersection  返回對象與對象之間的交集
polygon1 = Polygon([(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)])
hull1.intersection(polygon1)

#返回對象與對象之間的并集
hull1.union(polygon1)

#面面補(bǔ)集
hull1.difference(polygon1)

9、point、LineRing、LineString與numpy中的array互相轉(zhuǎn)換

pa = asPoint(np.array([0, 0])) #將numpy轉(zhuǎn)成point格式

 #將numpy數(shù)組轉(zhuǎn)成LineString格式
la = asLineString(np.array(([[1.0, 2.0], [3.0, 4.0]])))

#將numpy數(shù)組轉(zhuǎn)成multipoint集合
ma = asMultiPoint(np.array([[1.1, 2.2], [3.3, 4.4], [5.5, 6.6]]))

#將numpy轉(zhuǎn)成多邊形
pg = asPolygon(np.array([[1.1, 2.2], [3.3, 4.4], [5.5, 6.6]]))

二、geopandas模塊

geopandas拓展了pandas,共有兩種數(shù)據(jù)類型:GeoSeries、GeoDataFrame

下述是利用geopandas庫繪制世界地圖:

import pandas as pd
import geopandas 
import matplotlib.pyplot as plt
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres')) #read_file方法可以讀取shape文件
world.plot()
plt.show()

world.head()

#根據(jù)每一個(gè)polygon的pop_est不同,便可以用python繪制圖表顯示不同國家的人數(shù)
fig, ax = plt.subplots(figsize = (9, 6), dpi = 100)
world.plot('pop_est', ax = ax, legend =True)
plt.show()

python對海洋數(shù)據(jù)進(jìn)行預(yù)處理操作(這里我發(fā)現(xiàn),tqdm模塊可以顯示進(jìn)度條,感覺很高端,像下面這樣)

1、導(dǎo)入模塊

```python
import pandas as pd
import geopandas as gpd
from pyproj import Proj #左邊轉(zhuǎn)換
from keplergl import KeplerGl
from tqdm import tqdm
import os
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import shapely
import numpy as np
from datetime import datetime
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimSun'] #指定默認(rèn)字體為新宋體
plt.rcParams['axes.unicode_minus'] = False

DataFrame獲取數(shù)據(jù),坐標(biāo)轉(zhuǎn)換,計(jì)算距離

#獲取文件夾中的數(shù)據(jù)
def get_data(file_path, model):
    assert model in ['train', 'test'], '{} Not Support this type of file'.format(model)
    paths = os.listdir(file_path)
    tmp = []
    for t in tqdm(range(len(paths))):
        p = paths[t]
        with open('{}/{}'.format(file_path, p), encoding = 'utf-8') as f:
            next(f) #讀取下一行
            for line in f.readlines():
                tmp.append(line.strip().split(','))
    tmp_df = pd.DataFrame(tmp)
    if model == 'train':
        tmp_df.columns = ['ID', 'lat', 'lon', 'speed', 'direction', 'time', 'type']
    else:
        tmp_df['type'] = 'unknown'
        tmp_df.columns = ['ID', 'lat', 'lon', 'speed', 'direction', 'time', 'type']
    tmp_df['lat'] = tmp_df['lat'].astype(float)
    tmp_df['lon'] = tmp_df['lon'].astype(float)
    tmp_df['speed'] = tmp_df['speed'].astype(float)
    tmp_df['direction'] = tmp_df['direction'].astype(int)
    return tmp_df
file_path = r"C:\Users\李\Desktop\datawheal\數(shù)據(jù)\hy_round1_train_20200102"
model = 'train'
#平面坐標(biāo)轉(zhuǎn)經(jīng)緯度
def transform_xy2lonlat(df):
    x = df['lat'].values
    y = df['lon'].values
    p = Proj('+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +datum=NAD83 +units=us-ft +no_defs ')
    df['lon'], df['lat'] = p(y, x, inverse = True)
    return df
#修改數(shù)據(jù)的時(shí)間格式
def reformat_strtime(time_str = None, START_YEAR = '2019'):
     time_str_split = time_str.split(" ") #以空格為分隔符
     time_str_reformat = START_YEAR + '-' + time_str_split[0][:2] + "-" + time_str_split[0][2:4]
     time_str_reformat = time_str_reformat + " " + time_str_split[1]
     return time_str_reformat
 
#計(jì)算兩個(gè)點(diǎn)的距離
def haversine_np(lon1, lat1, lon2, lat2):
    lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2
    c = 2 * np.arcsin(np.sqrt(a))
    km = 6367 * c
    return km * 1000

利用3-sigma算法對異常值進(jìn)行處理,速度與時(shí)間

#計(jì)算時(shí)間的差值
def compute_traj_diff_time_distance(traj = None):
    #計(jì)算時(shí)間的差值
    time_diff_array = (traj['time'].iloc[1:].reset_index(drop = True) - traj['time'].iloc[:-1].reset_index(drop = True)).dt.total_seconds() / 60
    #計(jì)算坐標(biāo)之間的距離
    dist_diff_array = haversine_np(traj['lon'].values[1:],
                                   traj['lat'].values[1:],
                                   traj['lon'].values[:-1],
                                   traj['lat'].values[:-1])
    #填充第一個(gè)值
    time_diff_array = [time_diff_array.mean()] + time_diff_array.tolist()
    dist_diff_array = [dist_diff_array.mean()] + dist_diff_array.tolist()
    traj.loc[list(traj.index), 'time_array'] = time_diff_array
    traj.loc[list(traj.index), 'dist_array'] = dist_diff_array
    return traj
#對軌跡進(jìn)行異常點(diǎn)的剔除
def assign_traj_anomaly_points_nan(traj = None, speed_maximum = 23,time_interval_maximum = 200, coord_speed_maximum = 700):
    #將traj中的異常點(diǎn)分配給np.nan
    def thigma_data(data_y, n):
        data_x = [i for i in range(len(data_y))]
        ymean = np.mean(data_y)
        ystd = np.std(data_y)
        threshold1 = ymean - n * ystd
        threshold2 = ymean + n * ystd
        judge = []
        for data in data_y:
            if data  threshold1 or data > threshold2:
                judge.append(True)
            else:
                judge.append(False)
        return judge
    #異常速度修改
    is_speed_anomaly = (traj['speed'] > speed_maximum) | (traj['speed']  0)
    traj['speed'][is_speed_anomaly] = np.nan
    #根據(jù)距離和時(shí)間計(jì)算速度
    is_anomaly = np.array([False] * len(traj))
    traj['coord_speed'] = traj['dist_array'] / traj['time_array']
    #根據(jù)3-sigma算法對速度剔除以及較大的時(shí)間間隔點(diǎn)
    is_anomaly_tmp = pd.Series(thigma_data(traj['time_array'], 3)) | pd.Series(thigma_data(traj['coord_speed'], 3))
    is_anomaly = is_anomaly | is_anomaly_tmp
    is_anomaly.index = traj.index
    #軌跡點(diǎn)的3-sigma異常處理
    traj = traj[~is_anomaly].reset_index(drop = True)
    is_anomaly = np.array([False]*len(traj))
    if len(traj) != 0:
        lon_std, lon_mean = traj['lon'].std(), traj['lon'].mean()
        lat_std, lat_mean = traj['lat'].std(), traj['lat'].mean()
        lon_low, lon_high = lon_mean - 3* lon_std, lon_mean + 3 * lon_std
        lat_low, lat_high = lat_mean - 3 * lat_std, lat_mean + 3 * lat_std
        is_anomaly = is_anomaly | (traj['lon'] > lon_high) | ((traj['lon']  lon_low))
        is_anomaly = is_anomaly | (traj["lat"] > lat_high) | ((traj["lat"]  lat_low))
        traj = traj[~is_anomaly].reset_index(drop = True)
    return traj, [len(is_speed_anomaly) - len(traj)]

file_path = r"C:\Users\李\Desktop\datawheal\數(shù)據(jù)\hy_round1_train_20200102"
model = 'train'
df = get_data(file_path, model)
#轉(zhuǎn)換時(shí)間格式
df = transform_xy2lonlat(df)
df['time'] = df['time'].apply(reformat_strtime)
df['time'] = df['time'].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
#對軌跡的異常點(diǎn)進(jìn)行剔除,對缺失值進(jìn)行線性插值處理
ID_list = list(pd.DataFrame(df['ID'].value_counts()).index)
DF_NEW = []
Anomaly_count = []
for ID in tqdm(ID_list):
    # print(ID)
    df_id = compute_traj_diff_time_distance(df[df['ID'] == ID])
    df_new, count = assign_traj_anomaly_points_nan(df_id)
    df_new['speed'] = df_new['speed'].interpolate(method = 'linear', axis = 0)
    df_new = df_new.fillna(method = 'bfill') #用前一個(gè)非缺失值取填充該缺失值
    df_new = df_new.fillna(method = 'ffill')#用后一個(gè)非缺失值取填充該缺失值
    df_new['speed'] = df_new['speed'].clip(0, 23) #clip()函數(shù)將其限定在0,23
    Anomaly_count.append(count) #統(tǒng)計(jì)每個(gè)id異常點(diǎn)的數(shù)量有多少
    DF_NEW.append(df_new)
DF = pd.concat(DF_NEW)

處理后的DF

利用Geopandas中的Simplify進(jìn)行軌跡簡化和壓縮

#道格拉斯-普克,由該案例可以看出針對相同的ID軌跡,可以先用geopandas將其進(jìn)行簡化和數(shù)據(jù)壓縮
line = shapely.geometry.LineString(np.array(df[df['ID'] == '11'][['lon', 'lat']]))
ax = gpd.GeoSeries([line]).plot(color = 'red')
ax = gpd.GeoSeries([line]).simplify(tolerance = 0.000000001).plot(color = 'blue', ax = ax, linestyle = '--')
LegendElement = [Line2D([], [], color = 'red', label = '簡化前'),
                 Line2D([], [], color = 'blue', linestyle = '--', label = '簡化后')]
#將制作好的圖例影響對象列表導(dǎo)入legend()中
ax.legend(handles = LegendElement, loc = 'upper left', fontsize = 10)
print('化簡前數(shù)據(jù)長度:' + str(len(np.array(gpd.GeoSeries([line])[0]))))
print('化簡后數(shù)據(jù)長度' + str(len(np.array(gpd.GeoSeries([line]).simplify(tolerance = 0.000000001)[0]))))
#定義數(shù)據(jù)簡化函數(shù),通過shapely庫將經(jīng)緯度轉(zhuǎn)換成LineString格式,然后通過GeoSeries數(shù)據(jù)結(jié)構(gòu)中利用simplify進(jìn)行簡化,再將所有數(shù)據(jù)放入GeoDataFrame
def simplify_dataframe(df):
    line_list = []
    for i in tqdm(dict(list(df.groupby('ID')))):
        line_dict = {}
        lat_lon = dict(list(df.groupby('ID')))[i][['lon', 'lat']]
        line = shapely.geometry.LineString(np.array(lat_lon))
        line_dict['ID'] = dict(list(df.groupby('ID')))[i].iloc[0]['ID']
        line_dict['type'] = dict(list(df.groupby('ID')))[i].iloc[0]['type']
        line_dict['geometry'] = gpd.GeoSeries([line]).simplify(tolerance = 0.000000001)[0]
        line_list.append(line_dict)
    return gpd.GeoDataframe(line_list)

化簡前數(shù)據(jù)長度:377
化簡后數(shù)據(jù)長度156

這塊的df_gpd_change沒有讀出來,后續(xù)再發(fā)

df_gpd_change=pd.read_pickle(r"C:\Users\李\Desktop\datawheal\數(shù)據(jù)\df_gpd_change.pkl")        
map1=KeplerGl(height=800)#zoom_start與這個(gè)height類似,表示地圖的縮放程度
map1.add_data(data=df_gpd_change,name='data')
#當(dāng)運(yùn)行該代碼后,下面會(huì)有一個(gè)kepler.gl使用說明的鏈接,可以根據(jù)該鏈接進(jìn)行學(xué)習(xí)參

GeoHash編碼:利用二分法不斷縮小經(jīng)緯度區(qū)間,經(jīng)度區(qū)間二分為[-180, 0]和[0,180],緯度區(qū)間二分為[-90,0]和[0,90],偶數(shù)位放經(jīng)度,奇數(shù)位放緯度交叉,將二進(jìn)制數(shù)每五位轉(zhuǎn)化為十進(jìn)制,在對應(yīng)編碼表進(jìn)行32位編碼

 

2、geohash_encode編碼函數(shù)

def geohash_encode(latitude, longitude, precision = 12):
    lat_interval, lon_interval = (-90.0, 90.0), (-180, 180)
    base32 = '0123456789bcdefghjkmnpqrstuvwxyz'
    geohash = []
    bits = [16, 8, 4, 2, 1]
    bit = 0
    ch = 0
    even = True
    while len(geohash)  precision:
        if even:
            mid = (lon_interval[0] + lon_interval[1]) / 2
            if longitude > mid:
                ch |= bits[bit]
                lon_interval = (mid, lon_interval[1])
            else:
                lon_interval = (lon_interval[0], mid)
        else:
            mid = (lat_interval[0] + lat_interval[1]) / 2
            if latitude > mid:
                ch |= bits[bit]
                lat_interval = (mid, lat_interval[1])
            else:
                lat_interval = (lat_interval[0], mid)
        even = not even
        if bit  4:
            bit += 1
        else:
            geohash += base32[ch]
            bit = 0
            ch = 0
    return ''.join(geohash)

到此這篇關(guān)于python爬蟲之地理數(shù)據(jù)分析的文章就介紹到這了,更多相關(guān)python地理數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python爬取股票信息,并可視化數(shù)據(jù)的示例
  • Python爬取數(shù)據(jù)并實(shí)現(xiàn)可視化代碼解析
  • python如何爬取網(wǎng)站數(shù)據(jù)并進(jìn)行數(shù)據(jù)可視化
  • 高考要來啦!用Python爬取歷年高考數(shù)據(jù)并分析
  • 單身狗福利?Python爬取某婚戀網(wǎng)征婚數(shù)據(jù)
  • Python爬蟲之自動(dòng)爬取某車之家各車銷售數(shù)據(jù)
  • Python爬蟲之爬取某文庫文檔數(shù)據(jù)
  • Python爬蟲之爬取2020女團(tuán)選秀數(shù)據(jù)
  • Python爬蟲實(shí)戰(zhàn)之爬取京東商品數(shù)據(jù)并實(shí)實(shí)現(xiàn)數(shù)據(jù)可視化

標(biāo)簽:日照 金華 貴州 雙鴨山 臨汾 陽泉 克拉瑪依 赤峰

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python爬蟲之教你如何爬取地理數(shù)據(jù)》,本文關(guān)鍵詞  python,爬蟲,之教,你,如何,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python爬蟲之教你如何爬取地理數(shù)據(jù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于python爬蟲之教你如何爬取地理數(shù)據(jù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    久久久精品黄色| 国产在线播放一区三区四| 91欧美激情一区二区三区成人| 91麻豆制片厂| 久久理论电影网| 精品一区二区在线视频| 美女脱光内衣内裤| 欧美成人官网二区| 欧美一区二区在线播放| 亚洲国产一区二区视频| 国产精品欧美性爱| 欧美日韩国产影片| 亚洲一区二区四区蜜桃| av电影在线播放| 91精品国产综合久久精品app| 午夜久久久久久久久久一区二区| 性感美女一区二区三区| 欧美电影一区二区三区| 亚洲第一综合色| av无码一区二区三区| 日韩女优av电影在线观看| 青青草97国产精品免费观看| 白丝女仆被免费网站| 久久伊人蜜桃av一区二区| 国产一区二区三区蝌蚪| 欧美肥妇bbwbbw| 亚洲色大成网站www久久九九| 99在线精品一区二区三区| 在线观看日韩国产| 亚洲国产wwwccc36天堂| 免费在线观看成年人视频| 久久综合一区二区| 成人深夜视频在线观看| 欧美在线播放高清精品| 丝袜美腿亚洲综合| 亚洲最大成人综合网| 国产精品成人免费精品自在线观看| 99精品视频在线观看| 欧美乱熟臀69xxxxxx| 久久国产精品第一页| 潘金莲一级黄色片| 亚洲综合一区在线| 波多野结衣 在线| 国产欧美日韩综合精品一区二区| av一区二区不卡| 欧美一区二区三区影视| 国产乱对白刺激视频不卡| 色综合久久中文综合久久97| 无码av免费一区二区三区试看| 成人精品999| 亚洲欧美一区二区在线观看| 永久免费未满蜜桃| 国产色一区二区| 少妇丰满尤物大尺度写真| 中文字幕免费高清视频| 久久综合久久综合久久综合| 国产成人免费视频网站| 欧美人与禽zozo性伦| 韩国av一区二区三区| 欧美午夜不卡视频| 另类的小说在线视频另类成人小视频在线| 女性裸体视频网站| 午夜精品福利视频网站| 国产探花在线视频| 天堂蜜桃91精品| 91视频综合网| 首页综合国产亚洲丝袜| 九九热最新地址| 蜜桃av一区二区三区电影| 一本色道久久综合亚洲精品按摩| 青青草97国产精品免费观看 | 一区二区三区免费| 欧美 日韩 国产 成人 在线观看 | 影音先锋制服丝袜| 亚洲黄色av一区| 18啪啪污污免费网站| 五月天亚洲婷婷| 中文字幕手机在线观看| 看片网站欧美日韩| 欧美男生操女生| 成人黄色av电影| 久久综合成人精品亚洲另类欧美| 亚洲av综合色区无码另类小说| 国产欧美视频一区二区| 国产精品300页| 最近日韩中文字幕| 精品人妻中文无码av在线| 亚洲一二三专区| 美女福利视频在线观看| 精品一区二区日韩| 欧美一区二区在线视频| 国产精品熟女一区二区不卡| 亚洲国产精品ⅴa在线观看| 成年人网站免费在线观看| 一区二区三区鲁丝不卡| 人人澡人人澡人人看| 激情综合色综合久久综合| 在线观看亚洲免费视频| 国产精品久久久久aaaa樱花| 亚洲无人区码一码二码三码的含义 | 男女男精品视频网| 欧美色爱综合网| 99久久精品免费精品国产| 中文字幕欧美国产| 黄色片网站免费| 麻豆91小视频| 欧美大片一区二区三区| 国产+高潮+白浆+无码| 亚洲一区二区三区小说| 欧美最猛性xxxxx直播| www.亚洲色图| 综合欧美亚洲日本| 中文字幕无码日韩专区免费 | 中文字幕在线1| 日韩福利视频导航| 777欧美精品| 日本不卡视频一区| 亚洲福利电影网| 欧美欧美欧美欧美| 中国特级黄色大片| 五月婷婷久久丁香| 日韩一卡二卡三卡| 国产人妻人伦精品1国产丝袜| 日日夜夜精品视频免费| 欧美一区二区三区成人| 一本加勒比波多野结衣| 日本美女一区二区三区| 日韩精品自拍偷拍| 免费看污片网站| 国模冰冰炮一区二区| 久久久久久久久久看片| 又色又爽的视频| 国产成人免费av在线| 国产精品久久久一本精品| 国产av 一区二区三区| 99久久婷婷国产| 亚洲精品成人天堂一二三| 精品视频1区2区| 精品中文字幕在线播放| 美国精品在线观看| 国产亚洲成aⅴ人片在线观看| 日本成人精品视频| www.一区二区| 亚洲一区二区三区视频在线| 欧美人狂配大交3d怪物一区| 免费中文字幕av| 精品在线一区二区| 国产精品三级av| 在线精品视频免费观看| 国产xxxx视频| 另类欧美日韩国产在线| 国产无人区一区二区三区| 极品颜值美女露脸啪啪| 免费在线观看日韩av| 秋霞国产午夜精品免费视频| 久久中文字幕电影| 一本色道综合亚洲| 亚洲精品日韩一| 91精品国产综合久久精品| 国产成人无码精品久久二区三| 国产黄色精品网站| 亚洲精品免费在线| 91麻豆精品国产91久久久久久 | 日本高清免费不卡视频| 黄色国产在线视频| 国产呦精品一区二区三区网站 | 欧美午夜激情影院| 成av人片一区二区| 午夜精品aaa| 国产人伦精品一区二区| 在线影院国内精品| 一卡二卡三卡四卡| 成人蜜臀av电影| 三级成人在线视频| 国产精品欧美一区喷水| 欧美久久久久久久久| 懂色av粉嫩av浪潮av| 国产在线a视频| 精品无人区卡一卡二卡三乱码免费卡 | 日韩精品欧美精品| 中文字幕乱码久久午夜不卡| 欧美日本在线一区| 91禁男男在线观看| jjzzjjzz欧美69巨大| 国产河南妇女毛片精品久久久| 亚洲一区二区三区自拍| 久久久精品国产免费观看同学| 欧美天堂亚洲电影院在线播放| 久久中文字幕精品| 国产chinesehd精品露脸| 精品系列免费在线观看| 亚洲一二三区视频在线观看| 国产日韩精品一区二区三区在线| 欧美精品丝袜中出| 日本在线一级片| 国产精品无码永久免费不卡| av亚洲产国偷v产偷v自拍| 久久精品国产精品青草| 夜色激情一区二区| 中文字幕欧美激情一区|