久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

百度地圖小區(qū)邊界數(shù)據(jù)爬取實(shí)戰(zhàn):從POI錨點(diǎn)到GeoJSON

百度地圖小區(qū)邊界數(shù)據(jù)爬取實(shí)戰(zhàn):從POI錨點(diǎn)到GeoJSON 做小區(qū)邊界數(shù)據(jù)的時(shí)候很多朋友第一反應(yīng)是“直接去百度地圖上把邊界摳下來(lái)”。真操作起來(lái)你會(huì)發(fā)現(xiàn)這事兒沒(méi)有想象中那么簡(jiǎn)單。百度地圖的地圖瓦片是圖片格式想要得到矢量邊界就得換一套思路繞過(guò)去。我最早是被一個(gè)做房產(chǎn)數(shù)據(jù)分析的項(xiàng)目推到這條路上的需求很明確把目標(biāo)城市所有住宅小區(qū)的輪廓坐標(biāo)落進(jìn)數(shù)據(jù)庫(kù)供后續(xù)做空間關(guān)聯(lián)和可視化。折騰了幾個(gè)晚上最終跑通了一條還算穩(wěn)定的鏈路今天把完整過(guò)程拆開(kāi)講包括方案怎么選、接口怎么調(diào)、坐標(biāo)怎么處理、數(shù)據(jù)怎么驗(yàn)證以及我踩過(guò)的那些坑。這篇內(nèi)容適合已經(jīng)會(huì)用Python發(fā)HTTP請(qǐng)求、想拿真實(shí)地圖數(shù)據(jù)做分析的開(kāi)發(fā)者也適合剛接觸地理數(shù)據(jù)爬取、對(duì)百度地圖開(kāi)放平臺(tái)不太熟的新手。核心思路不復(fù)雜用百度地圖Web服務(wù)API的Place檢索接口拿小區(qū)POI錨點(diǎn)再用JS API的Boundary接口或者前端頁(yè)面內(nèi)部的數(shù)據(jù)接口拿邊界輪廓最后統(tǒng)一做坐標(biāo)糾偏、數(shù)據(jù)清洗和格式轉(zhuǎn)換。整個(gè)過(guò)程里最容易翻車(chē)的地方往往不是代碼而是對(duì)官方API的能力邊界理解不到位。1. 需求拆解與總體思路1.1 “爬小區(qū)邊界”到底在爬什么先明確一個(gè)概念百度地圖上的“小區(qū)邊界”在數(shù)據(jù)層面上不是一個(gè)整體文件而是分層存在的。第一層是POI點(diǎn)數(shù)據(jù)代表小區(qū)入口或中心點(diǎn)的經(jīng)緯度坐標(biāo)附帶名稱(chēng)、地址、類(lèi)型等屬性第二層是面數(shù)據(jù)也就是邊界的閉合多邊形由一串有序坐標(biāo)點(diǎn)組成。POI數(shù)據(jù)通過(guò)官方API就能拿到但面數(shù)據(jù)并沒(méi)有一個(gè)公開(kāi)的、一次性下載全量的接口。很多人一開(kāi)始會(huì)想到用爬蟲(chóng)直接抓百度地圖Web頁(yè)面的XHR請(qǐng)求比如拖動(dòng)地圖時(shí)network面板里出現(xiàn)的那一堆帶boundary字樣的JSON。這個(gè)思路理論上可行但實(shí)際做起來(lái)有門(mén)檻接口帶簽名參數(shù)、有訪(fǎng)問(wèn)頻率限制、返回的數(shù)據(jù)結(jié)構(gòu)會(huì)隨版本變化。另一個(gè)常見(jiàn)思路是用Selenium模擬操作去畫(huà)邊界但性能太差跑幾百個(gè)小區(qū)就讓人崩潰。我最終采用的方案是“官方API為主、前端接口為輔”的組合拳。先用Place檢索API把小區(qū)POI撈下來(lái)拿到每個(gè)小區(qū)的名稱(chēng)和中心點(diǎn)坐標(biāo)再以中心點(diǎn)為線(xiàn)索去請(qǐng)求邊界相關(guān)的數(shù)據(jù)接口。這個(gè)順序很重要因?yàn)榇蟛糠诌吔缃涌诙夹枰扔妹Q(chēng)或坐標(biāo)定位到具體小區(qū)才能返回對(duì)應(yīng)的圍欄坐標(biāo)。1.2 三種主流方案的優(yōu)劣對(duì)比在我動(dòng)手之前花了點(diǎn)時(shí)間把網(wǎng)上能找到的方式都過(guò)了一遍列個(gè)對(duì)比表供你參考方案數(shù)據(jù)來(lái)源優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景Web服務(wù)APIPlace檢索官方穩(wěn)定、有配額、返回結(jié)構(gòu)化數(shù)據(jù)只有POI點(diǎn)沒(méi)有邊界多邊形批量位置篩查、作為錨點(diǎn)數(shù)據(jù)JS API Boundary接口官方能拿到部分邊界輪廓主要是行政區(qū)劃邊界小區(qū)級(jí)支持有限城市、區(qū)縣邊界獲取前端頁(yè)面XHR接口非官方數(shù)據(jù)全、直接有邊界坐標(biāo)接口會(huì)變、有風(fēng)控、需解析簽名小批量、研究性質(zhì)第三方數(shù)據(jù)商商業(yè)開(kāi)箱即用、數(shù)據(jù)完整收費(fèi)、更新周期不確定生產(chǎn)環(huán)境、預(yù)算充足我個(gè)人的建議是如果是正式項(xiàng)目、要長(zhǎng)期更新數(shù)據(jù)直接考慮采購(gòu)合規(guī)的商業(yè)數(shù)據(jù)如果是個(gè)人研究、原型驗(yàn)證或者數(shù)據(jù)量在幾千條量級(jí)以?xún)?nèi)官方API加前端接口的組合足夠用。下面我講的實(shí)操就是基于這個(gè)組合展開(kāi)的。1.3 為什么不能直接依賴(lài)HTML解析這里要專(zhuān)門(mén)說(shuō)一句因?yàn)楹笈_(tái)經(jīng)常有人問(wèn)“為什么不用BeautifulSoup去解析百度地圖的HTML頁(yè)面”。原因是百度地圖的前端頁(yè)面是重度異步渲染的頁(yè)面里的地圖數(shù)據(jù)是通過(guò)一堆加密的JavaScript動(dòng)態(tài)加載的HTML源碼里幾乎沒(méi)有POI和邊界信息。即便你用Selenium渲染完整頁(yè)面拿到的也只是canvas畫(huà)出來(lái)的像素不是結(jié)構(gòu)化坐標(biāo)數(shù)據(jù)。所以“爬”的落點(diǎn)不是HTML解析而是數(shù)據(jù)接口。這一點(diǎn)想通了后面就順了。用requests直接請(qǐng)求接口、處理JSON響應(yīng)比模擬瀏覽器操作要輕量得多也更容易控制頻率和出錯(cuò)重試。2. 關(guān)鍵技術(shù)方案選型2.1 官方Place檢索API怎么用百度地圖開(kāi)放平臺(tái)的Place檢索API是拿POI數(shù)據(jù)的正道。它支持區(qū)域檢索、圓形區(qū)域檢索和矩形區(qū)域檢索三種方式。對(duì)于“小區(qū)邊界爬取”這個(gè)需求我推薦用區(qū)域檢索按城市和關(guān)鍵詞“小區(qū)”來(lái)拉取POI列表。接口地址是https://api.map.baidu.com/place/v2/search關(guān)鍵參數(shù)包括query檢索關(guān)鍵詞填“小區(qū)”region行政區(qū)劃名稱(chēng)比如“北京市”output返回格式填jsonak你在百度地圖開(kāi)放平臺(tái)申請(qǐng)的密鑰scope填2這樣可以返回更詳細(xì)的POI信息包括uid和locationpage_size每頁(yè)返回?cái)?shù)量最大是20page_num頁(yè)碼從0開(kāi)始需要注意普通開(kāi)發(fā)者賬號(hào)的單日配額有限而且每個(gè)請(qǐng)求返回的total并不是全量數(shù)據(jù)量API存在一定的“最多返回前幾百條”的隱性限制。這個(gè)問(wèn)題我放在后面“常見(jiàn)問(wèn)題”里細(xì)講這里先按下不表。我拿到的返回結(jié)構(gòu)大概是這樣的{ status: 0, results: [ { name: 某某花園, location: { lat: 39.908823, lng: 116.397470 }, uid: e1f2c9d8a0b1c2d3e4f5, area: 朝陽(yáng)區(qū), detail_info: { tag: 住宅區(qū);小區(qū) } } ] }這里的lat和lng是百度坐標(biāo)系BD-09下的坐標(biāo)不是標(biāo)準(zhǔn)經(jīng)緯度后面要轉(zhuǎn)換先記住這一點(diǎn)。2.2 邊界數(shù)據(jù)從哪里來(lái)拿到POI錨點(diǎn)后下一步就是拿邊界。我試過(guò)三條路第一條是直接用JS API里的Boundary方法。但實(shí)測(cè)下來(lái)這個(gè)接口對(duì)行政區(qū)劃邊界支持得很好對(duì)小區(qū)級(jí)別的支持有限很多小區(qū)根本查不到對(duì)應(yīng)邊界。原因是百度并沒(méi)有把小區(qū)邊界做成一個(gè)公開(kāi)的行政邊界數(shù)據(jù)源開(kāi)放出來(lái)。第二條是抓百度地圖Web版頁(yè)面內(nèi)部使用的接口。在新版百度地圖的頁(yè)面里搜索某個(gè)小區(qū)后地圖上會(huì)畫(huà)出一個(gè)圍欄這個(gè)圍欄的坐標(biāo)就是從某個(gè)內(nèi)部接口返回的。這個(gè)接口的URL和參數(shù)會(huì)隨前端版本變化而且返回的數(shù)據(jù)里帶一些校驗(yàn)字段。這條路能走通但需要花時(shí)間逆向分析風(fēng)險(xiǎn)是接口隨時(shí)可能調(diào)整。第三條是我最后用的主力方案通過(guò)百度地圖拾取坐標(biāo)系統(tǒng)頁(yè)面的關(guān)聯(lián)接口來(lái)獲取。這個(gè)頁(yè)面本身是百度官方提供給開(kāi)發(fā)者用的工具用來(lái)查詢(xún)某個(gè)地點(diǎn)對(duì)應(yīng)的經(jīng)緯度和行政區(qū)劃信息。在查詢(xún)小區(qū)名稱(chēng)后頁(yè)面會(huì)調(diào)用一個(gè)內(nèi)部的geocoder接口返回的JSON里包含了地點(diǎn)詳情和經(jīng)緯度但依然沒(méi)有完整的邊界多邊形。說(shuō)到這里我得坦白一個(gè)現(xiàn)實(shí)百度地圖官方渠道并沒(méi)有一個(gè)完全公開(kāi)的小區(qū)邊界矢量數(shù)據(jù)接口。我最終的落地方案是把POI錨點(diǎn)拿到后結(jié)合高德地圖的行政區(qū)劃接口和第三方開(kāi)放數(shù)據(jù)比如某些城市開(kāi)放平臺(tái)發(fā)布的住宅小區(qū)輪廓數(shù)據(jù)做補(bǔ)充再用百度地圖的坐標(biāo)拾取器做交叉驗(yàn)證。這樣雖然不能保證每個(gè)小區(qū)都有精確的圍欄但錨點(diǎn)準(zhǔn)確性、屬性完整度都能達(dá)到分析需求。2.3 坐標(biāo)系的坑BD-09與GCJ-02百度地圖的坐標(biāo)系是BD-09高德地圖是GCJ-02兩者的坐標(biāo)值會(huì)有一個(gè)偏移。這個(gè)偏移足夠讓你在地圖上展示時(shí)錯(cuò)位幾十米到幾百米不等。如果你后面要做跨平臺(tái)的數(shù)據(jù)對(duì)比或者想用高德地圖做可視化就必須做坐標(biāo)轉(zhuǎn)換。百度官方提供了一個(gè)坐標(biāo)轉(zhuǎn)換API可以把百度坐標(biāo)轉(zhuǎn)成其他坐標(biāo)系https://api.map.baidu.com/geoconv/v1/?coords116.397470,39.908823from5to3ak你的AK這里from5代表源坐標(biāo)系是百度坐標(biāo)to3代表目標(biāo)坐標(biāo)系是GCJ-02高德坐標(biāo)。實(shí)際使用中我也試過(guò)在本地用算法做轉(zhuǎn)換網(wǎng)上有很多公開(kāi)的坐標(biāo)偏移算法代碼。但官方API的精度更好而且不容易因?yàn)樗惴ò姹静町惓霈F(xiàn)批次性偏移。建議優(yōu)先用API轉(zhuǎn)換如果請(qǐng)求量太大再用本地算法兜底。3. 實(shí)操完整流程與代碼實(shí)現(xiàn)3.1 環(huán)境準(zhǔn)備與密鑰申請(qǐng)動(dòng)手之前先把環(huán)境備齊。我用的Python 3.9依賴(lài)庫(kù)只有requests和json后面做數(shù)據(jù)保存時(shí)用geopandas寫(xiě)GeoJSON但這一步不是必須的單機(jī)小規(guī)模用普通JSON文件足夠。百度地圖開(kāi)放平臺(tái)的密鑰申請(qǐng)流程不復(fù)雜打開(kāi)百度地圖開(kāi)放平臺(tái)官網(wǎng)注冊(cè)并登錄賬號(hào)。進(jìn)入控制臺(tái)創(chuàng)建一個(gè)“服務(wù)端”類(lèi)型的應(yīng)用。應(yīng)用名稱(chēng)隨意填I(lǐng)P白名單留空表示不限制。創(chuàng)建完成后頁(yè)面會(huì)給你一個(gè)AK訪(fǎng)問(wèn)密鑰這就是后面所有接口請(qǐng)求都需要帶的參數(shù)。提示如果你在瀏覽器里看到請(qǐng)求返回APP Referer校驗(yàn)失敗之類(lèi)的錯(cuò)誤多半是因?yàn)榘褢?yīng)用類(lèi)型選成了“瀏覽器端”。做服務(wù)端爬取一定要選“服務(wù)端”。3.2 批量獲取小區(qū)POI錨點(diǎn)先寫(xiě)一個(gè)最基礎(chǔ)的請(qǐng)求函數(shù)用來(lái)翻頁(yè)拉取某個(gè)城市的小區(qū)POI數(shù)據(jù)。import requests import json import time AK 你的AK def search_community(city, page_num): url https://api.map.baidu.com/place/v2/search params { query: 小區(qū), region: city, output: json, scope: 2, page_size: 20, page_num: page_num, ak: AK } resp requests.get(url, paramsparams, timeout10) data resp.json() return data請(qǐng)求返回后把results里的POI字段抽出來(lái)保存成列表。這里有個(gè)細(xì)節(jié)百度Place API對(duì)同一關(guān)鍵詞的搜索最多返回幾百條POI不能像想象中那樣把整個(gè)城市所有小區(qū)都拉完。針對(duì)這個(gè)問(wèn)題我的折中策略是把城市切成多個(gè)檢索區(qū)域用矩形區(qū)域檢索去分塊拉取。矩形區(qū)域檢索的用法是換上bounds參數(shù)比如bounds39.80,116.20;40.10,116.50表示經(jīng)緯度范圍左下角和右上角的坐標(biāo)用分號(hào)分隔。然后在循環(huán)里按固定步長(zhǎng)滑動(dòng)這個(gè)矩形窗口把整個(gè)城市覆蓋一遍。這樣能拿到比單純區(qū)域檢索多不少的數(shù)據(jù)。def search_by_bounds(bounds_str, page_num): url https://api.map.baidu.com/place/v2/search params { query: 小區(qū), bounds: bounds_str, output: json, scope: 2, page_size: 20, page_num: page_num, ak: AK } resp requests.get(url, paramsparams, timeout10) return resp.json()這里要注意矩形檢索模式下region參數(shù)不能同時(shí)使用。另外分割矩形時(shí)步長(zhǎng)不要太大我建議每個(gè)窗口覆蓋大約0.1度乘以0.1度的范圍這樣既能控制POI密度又不會(huì)讓單個(gè)窗口返回超過(guò)20條的POI把數(shù)據(jù)沖掉。3.3 爬取邊界輪廓的推薦路徑拿到POI錨點(diǎn)后就進(jìn)入最核心的環(huán)節(jié)為每個(gè)小區(qū)匹配邊界輪廓。這里我嘗試過(guò)多條路徑最終穩(wěn)定可復(fù)現(xiàn)的方案是方案A通過(guò)百度頁(yè)面接口獲取指定小區(qū)邊界在百度地圖網(wǎng)頁(yè)版中搜索一個(gè)小區(qū)后界面會(huì)調(diào)用的接口大概形如https://map.baidu.com/?qtextuid你的小區(qū)UIDak你的AK這里的uid是Place檢索結(jié)果里POI自帶的那一串字符。這個(gè)接口的返回值里有時(shí)會(huì)包含content字段底下有g(shù)eo之類(lèi)的邊界信息。但實(shí)測(cè)下來(lái)這個(gè)接口的返回結(jié)構(gòu)和可用性非常不穩(wěn)定有的小區(qū)有有的小區(qū)沒(méi)有而且字段經(jīng)常改。方案B用高德地圖API補(bǔ)邊界如果目標(biāo)城市的小區(qū)邊界以高德數(shù)據(jù)為主那可以考慮用高德的行政區(qū)劃查詢(xún)接口。高德的接口對(duì)小區(qū)的支持比百度好一些https://restapi.amap.com/v3/geocode/geo?address小區(qū)名city城市名key你的高德Key返回的經(jīng)緯度是GCJ-02坐標(biāo)可以作為輔助錨點(diǎn)。但高德同樣沒(méi)有直接暴露小區(qū)多邊形邊界的接口。方案C結(jié)合開(kāi)源邊界數(shù)據(jù)做兜底真正能讓批量數(shù)據(jù)落地的方式是把上面拿到的錨點(diǎn)坐標(biāo)和網(wǎng)絡(luò)上已有的開(kāi)源小區(qū)輪廓數(shù)據(jù)做匹配。比如很多城市開(kāi)放數(shù)據(jù)平臺(tái)會(huì)發(fā)布住宅小區(qū)的矢量輪廓格式通常是GeoJSON或Shapefile。把POI錨點(diǎn)與這些數(shù)據(jù)按名稱(chēng)和空間位置做JOIN能匹配上的就保留輪廓匹配不上的就只保留錨點(diǎn)。跑完整個(gè)流程后我的數(shù)據(jù)表基本是這樣的結(jié)構(gòu)字段示例說(shuō)明name某某花園小區(qū)名稱(chēng)bd_lat39.908823百度坐標(biāo)緯度bd_lng116.397470百度坐標(biāo)經(jīng)度gcj_lat39.903824高德坐標(biāo)緯度gcj_lng116.391234高德坐標(biāo)經(jīng)度boundary[[116.3912,39.9038],...]多邊形坐標(biāo)可為空uide1f2c9d8a0b1百度POI唯一標(biāo)識(shí)3.4 批量坐標(biāo)轉(zhuǎn)換拿到百度坐標(biāo)后批量轉(zhuǎn)換我用的是官方geoconv接口一次最多轉(zhuǎn)換100個(gè)坐標(biāo)點(diǎn)。寫(xiě)個(gè)簡(jiǎn)單的批量處理函數(shù)def batch_convert(coords_list): result [] for i in range(0, len(coords_list), 100): batch coords_list[i:i100] coords_str ;.join([f{lng},{lat} for lat, lng in batch]) url https://api.map.baidu.com/geoconv/v1/ params { coords: coords_str, from: 5, to: 3, ak: AK } resp requests.get(url, paramsparams, timeout10) data resp.json() if data.get(status) 0: for item in data[result]: result.append((item[y], item[x])) time.sleep(0.3) return result注意我代碼里的sleep(0.3)這是必須的。雖然單個(gè)請(qǐng)求很輕但如果不限速阿克很快就會(huì)觸發(fā)并發(fā)限制然后整個(gè)IP段都會(huì)被臨時(shí)封掉。爬數(shù)據(jù)這件事穩(wěn)比快重要。3.5 輸出GeoJSON最后一步把數(shù)據(jù)結(jié)構(gòu)化成GeoJSON方便在QGIS、Mapbox或者任意地理可視化工具里打開(kāi)。import json geojson { type: FeatureCollection, features: [] } for item in data_list: feature { type: Feature, properties: { name: item[name], source: baidu }, geometry: { type: Point, coordinates: [item[gcj_lng], item[gcj_lat]] } } geojson[features].append(feature) with open(communities.geojson, w, encodingutf-8) as f: json.dump(geojson, f, ensure_asciiFalse, indent2)如果你拿到了邊界輪廓把Point換成Polygon即可geometry: { type: Polygon, coordinates: [[[lng1, lat1], [lng2, lat2], ...]] }4. 數(shù)據(jù)驗(yàn)證與常見(jiàn)問(wèn)題4.1 坐標(biāo)偏移導(dǎo)致的劃區(qū)錯(cuò)位我第一次把爬下來(lái)的POI數(shù)據(jù)疊加到高德底圖上時(shí)發(fā)現(xiàn)點(diǎn)位全部往東南方向偏移了幾百米。排查完后確認(rèn)就是坐標(biāo)系不一致的問(wèn)題。這個(gè)問(wèn)題的典型表現(xiàn)是百度坐標(biāo)在高德地圖上顯示時(shí)點(diǎn)位會(huì)偏向東北方向而高德坐標(biāo)在百度地圖上會(huì)偏向西南方向。解決辦法就是上面提到的geoconv轉(zhuǎn)換一定要做不要省。4.2 接口請(qǐng)求頻率限制百度地圖開(kāi)放平臺(tái)的默認(rèn)并發(fā)限制是每秒不超過(guò)10次超過(guò)后接口會(huì)返回APP并發(fā)超限。我連續(xù)踩了兩次之后在代碼里加了一個(gè)限速器也就是統(tǒng)一在每次請(qǐng)求之間sleep 0.2到0.5秒同時(shí)增加了請(qǐng)求失敗指數(shù)退避重試邏輯。import time import random def safe_request(url, params, retries3): for i in range(retries): try: resp requests.get(url, paramsparams, timeout10) data resp.json() if data.get(status) 0: return data elif data.get(status) 302: # IP被臨時(shí)限制等待較長(zhǎng)時(shí)間再重試 time.sleep(60) else: time.sleep(1) except Exception as e: print(e) time.sleep(2 * (i 1)) return None這個(gè)函數(shù)看著簡(jiǎn)單但在整個(gè)流程里幫我節(jié)省了大量時(shí)間。尤其是status302這個(gè)是百度專(zhuān)門(mén)用來(lái)限流的返回碼遇到它就別再瘋狂重試了直接等。4.3 Place API返回結(jié)果不全前面說(shuō)過(guò)Place API對(duì)同一個(gè)關(guān)鍵詞檢索有隱性結(jié)果截?cái)?。?shí)際表現(xiàn)是無(wú)論你怎么翻頁(yè)總POI數(shù)超過(guò)一定數(shù)量后頁(yè)數(shù)就不變了。這個(gè)問(wèn)題沒(méi)有完美的繞過(guò)方案但用矩形分塊可以極大緩解。分塊時(shí)注意兩個(gè)坑每個(gè)矩形塊返回的POI數(shù)量若達(dá)到20條上限說(shuō)明這個(gè)塊太小了可以適當(dāng)擴(kuò)大范圍再跑一次。若某個(gè)矩形塊返回的POI數(shù)量為0先別急著跳過(guò)有可能是這個(gè)塊內(nèi)確實(shí)沒(méi)有POI也有可能是接口在你請(qǐng)求時(shí)臨時(shí)抽風(fēng)。穩(wěn)妥起見(jiàn)可以重試一次。4.4 邊界輪廓經(jīng)常缺數(shù)據(jù)對(duì)于邊界缺失我的處理原則是不硬湊。有些小區(qū)在百度地圖上本身就沒(méi)有獨(dú)立的圍欄數(shù)據(jù)比如一些老式筒子樓或者新建未交付的樓盤(pán)。對(duì)于這類(lèi)情況保留錨點(diǎn)和屬性信息邊界字段留空即可。硬湊一個(gè)正方形輪廓出來(lái)的做法做出來(lái)的地圖一眼假分析結(jié)果也沒(méi)有意義。如果項(xiàng)目真的需要完整邊界建議轉(zhuǎn)向開(kāi)源的OpenStreetMap數(shù)據(jù)。從OSM上可以拿到部分住宅區(qū)面數(shù)據(jù)但覆蓋率和更新時(shí)效跟百度地圖比差不少適合做補(bǔ)充不適合做主力數(shù)據(jù)源。4.5 數(shù)據(jù)清洗與去重爬完數(shù)據(jù)后去重是必備步驟。同一個(gè)小區(qū)可能被多個(gè)矩形窗口重復(fù)采集到這時(shí)候需要按uid去重。如果換用了不同接口導(dǎo)致uid缺失就用“名稱(chēng)坐標(biāo)距離”雙重條件去重先按名稱(chēng)拼音聚簇再計(jì)算簇內(nèi)坐標(biāo)兩兩距離距離小于100米的視為重復(fù)。from math import radians, cos, sin, asin, sqrt def haversine(lng1, lat1, lng2, lat2): lng1, lat1, lng2, lat2 map(radians, [lng1, lat1, lng2, lat2]) dlng lng2 - lng1 dlat lat2 - lat1 a sin(dlat/2)**2 cos(lat1) * cos(lat2) * sin(dlng/2)**2 return 2 * 6371 * asin(sqrt(a))這是最常用的距離計(jì)算公式我在去重時(shí)會(huì)配合它做一個(gè)簡(jiǎn)單的循環(huán)判斷把距離過(guò)近的POI合并掉。4.6 數(shù)據(jù)可視化結(jié)果異常處理完的數(shù)據(jù)用QGIS打開(kāi)后如果發(fā)現(xiàn)點(diǎn)位分布非常奇怪比如大量POI聚集在同一條街上那大概率是矩形檢索窗口設(shè)計(jì)得有問(wèn)題。我遇到過(guò)一種情況某個(gè)窗口把城市里的主干道整個(gè)圈了進(jìn)去結(jié)果拉回來(lái)的POI全是沿街商鋪而不是小區(qū)。解決方法是增加POI標(biāo)簽過(guò)濾只保留detail_info.tag里包含“住宅區(qū)”或“小區(qū)”的記錄。5. 從爬蟲(chóng)到數(shù)據(jù)服務(wù)的實(shí)用心得5.1 先想清楚數(shù)據(jù)要拿來(lái)干什么爬數(shù)據(jù)的過(guò)程很有意思但我現(xiàn)在回頭看最關(guān)鍵的決策其實(shí)是在動(dòng)手之前做的——你到底要拿這些數(shù)據(jù)干嘛。如果只是想在地圖上點(diǎn)幾個(gè)點(diǎn)看分布那POI錨點(diǎn)就夠用了如果是想做覆蓋范圍分析、計(jì)算每個(gè)小區(qū)到地鐵站的距離那沒(méi)有邊界也能做用中心點(diǎn)代替如果是要做樓盤(pán)輪廓對(duì)比、拿多邊形做空間拓?fù)溥\(yùn)算那就必須找到可靠的邊界數(shù)據(jù)源這決定了你的技術(shù)方案完全不同。很多人一上來(lái)就盯著“邊界”兩個(gè)字忽略了業(yè)務(wù)本身對(duì)精度的要求。比如我之前做的項(xiàng)目實(shí)際上用中心點(diǎn)坐標(biāo)加一個(gè)預(yù)設(shè)半徑就能滿(mǎn)足需求根本不需要去死磕邊界輪廓白白浪費(fèi)了幾天時(shí)間。這個(gè)教訓(xùn)還挺深刻的。5.2 數(shù)據(jù)更新的節(jié)奏把握地圖POI數(shù)據(jù)是會(huì)變化的新樓盤(pán)入市、舊小區(qū)改造、物業(yè)更名都會(huì)影響數(shù)據(jù)質(zhì)量。我做數(shù)據(jù)同步時(shí)采用“全量周更、增量日更”的策略每周用Place API把所有目標(biāo)城市全量掃一遍保證基礎(chǔ)數(shù)據(jù)不丟每天對(duì)重點(diǎn)關(guān)注的高頻區(qū)域做一次小范圍增量更新。這樣既控制了API配額消耗又能保證關(guān)鍵數(shù)據(jù)的新鮮度。增量更新的做法不復(fù)雜就是拿已有的POI名稱(chēng)列表和新爬到的數(shù)據(jù)做比對(duì)凡是新出現(xiàn)的名稱(chēng)或者UID就標(biāo)記為新增凡是在舊數(shù)據(jù)里有但新數(shù)據(jù)里消失的就標(biāo)記為下架。5.3 不要忽視數(shù)據(jù)脫敏與合規(guī)最后提醒一下爬到的數(shù)據(jù)里包含小區(qū)名稱(chēng)和精確坐標(biāo)這類(lèi)數(shù)據(jù)屬于敏感地理信息。如果只是本地研究用途問(wèn)題不大但如果你要把數(shù)據(jù)發(fā)布出來(lái)、做展示、或者提供給第三方使用一定要謹(jǐn)慎。我個(gè)人的做法是對(duì)外展示時(shí)只保留到城市或區(qū)縣級(jí)別的聚合數(shù)據(jù)不給到具體小區(qū)坐標(biāo)也不做單點(diǎn)精確查詢(xún)的接口。合規(guī)這根弦比技術(shù)實(shí)現(xiàn)更重要?jiǎng)e等出了事再后悔。6. 代碼封裝做一個(gè)可復(fù)用的爬取工具6.1 完整工具類(lèi)結(jié)構(gòu)如果只是跑一次性的腳本上面那些零散的函數(shù)足夠用了。但要長(zhǎng)期維護(hù)數(shù)據(jù)更新我建議把代碼封裝成一個(gè)工具類(lèi)把API調(diào)用、數(shù)據(jù)存儲(chǔ)、日志記錄都統(tǒng)一起來(lái)。下面是一個(gè)簡(jiǎn)化版的類(lèi)結(jié)構(gòu)class BaiduCommunityCrawler: def __init__(self, ak): self.ak ak self.session requests.Session() self.base_url https://api.map.baidu.com def search_communities(self, region, page_num0, page_size20): pass def convert_coords(self, coords_list): pass def get_community_detail(self, uid): pass def save_to_geojson(self, file_path): pass6.2 增加持久化存儲(chǔ)數(shù)據(jù)量小的時(shí)候存在JSON文件里方便但數(shù)據(jù)量一旦上萬(wàn)條建議上SQLite。SQLite不需要額外部署服務(wù)Python標(biāo)準(zhǔn)庫(kù)自帶非常適合這種單機(jī)爬蟲(chóng)場(chǎng)景。import sqlite3 conn sqlite3.connect(communities.db) cursor conn.cursor() cursor.execute( CREATE TABLE IF NOT EXISTS communities ( id INTEGER PRIMARY KEY AUTOINCREMENT, uid TEXT UNIQUE, name TEXT, bd_lat REAL, bd_lng REAL, gcj_lat REAL, gcj_lng REAL, boundary TEXT, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) conn.commit()數(shù)據(jù)庫(kù)表建好后每次爬取開(kāi)始先查一遍已有數(shù)據(jù)把已經(jīng)存在的UID過(guò)濾掉這樣能省下大量重復(fù)請(qǐng)求的配額。6.3 斷點(diǎn)續(xù)爬的實(shí)現(xiàn)爬蟲(chóng)最怕跑了一半崩了。為了應(yīng)對(duì)中斷我在代碼里加了斷點(diǎn)續(xù)爬的邏輯每處理完一個(gè)矩形窗口就把進(jìn)度寫(xiě)入一個(gè)單獨(dú)的progress.json文件里下次啟動(dòng)時(shí)讀取這個(gè)文件跳過(guò)已經(jīng)完成的窗口。這樣即使程序因?yàn)榫W(wǎng)絡(luò)波動(dòng)、斷電等原因中斷也不需要從頭再來(lái)。import os def save_progress(completed_windows): with open(progress.json, w, encodingutf-8) as f: json.dump({completed: completed_windows}, f) def load_progress(): if os.path.exists(progress.json): with open(progress.json, r, encodingutf-8) as f: return json.load(f).get(completed, []) return []6.4 多線(xiàn)程是否必要我的答案是個(gè)人項(xiàng)目完全沒(méi)必要。百度地圖API的并發(fā)限制擺在那里多線(xiàn)程不能幫你突破配額反而容易觸發(fā)封禁。與其花時(shí)間優(yōu)化并發(fā)不如把單線(xiàn)程跑穩(wěn)、做好重試和斷點(diǎn)續(xù)爬。如果你的數(shù)據(jù)量大到單線(xiàn)程跑不完更合適的方案是申請(qǐng)更高的配額或者換用商業(yè)數(shù)據(jù)源而不是在爬蟲(chóng)層面無(wú)限壓榨接口。7. 邊界數(shù)據(jù)缺失時(shí)應(yīng)考慮的替代方向7.1 城市開(kāi)放數(shù)據(jù)平臺(tái)國(guó)內(nèi)不少城市的數(shù)據(jù)開(kāi)放平臺(tái)會(huì)公布住宅小區(qū)的基礎(chǔ)信息部分城市甚至直接提供GeoJSON格式的小區(qū)邊界數(shù)據(jù)。這類(lèi)數(shù)據(jù)是政府發(fā)布的權(quán)威性和準(zhǔn)確性都不錯(cuò)但問(wèn)題是格式不統(tǒng)一、更新不及時(shí)而且不是所有城市都有。爬取百度地圖的同時(shí)可以順手把目標(biāo)城市的開(kāi)放數(shù)據(jù)平臺(tái)過(guò)一遍能補(bǔ)多少算多少。7.2 OpenStreetMap的building數(shù)據(jù)OSM上有一部分住宅區(qū)residential area的面數(shù)據(jù)雖然在國(guó)內(nèi)覆蓋有限但在一些城市的新區(qū)、開(kāi)發(fā)區(qū)OSM的數(shù)據(jù)反而比商業(yè)地圖更新更勤。通過(guò)Overpass API可以按區(qū)域條件查詢(xún)返回的JSON直接就是經(jīng)緯度坐標(biāo)。7.3 技術(shù)之外的替代思路如果最終拿不到精確邊界還有一個(gè)“曲線(xiàn)救國(guó)”的思路用小區(qū)POI錨點(diǎn)做緩沖區(qū)分析。具體做法是以POI為中心、按小區(qū)規(guī)模生成一個(gè)圓形或者橢圓的緩沖區(qū)作為邊界的近似替代。對(duì)大多數(shù)統(tǒng)計(jì)分析場(chǎng)景這種近似已經(jīng)夠用。如果再講究一點(diǎn)可以把緩沖區(qū)半徑和小區(qū)屬性做關(guān)聯(lián)比如戶(hù)數(shù)多的小區(qū)半徑大一點(diǎn)戶(hù)數(shù)少的小區(qū)半徑小一點(diǎn)。這個(gè)方法雖然學(xué)術(shù)上不夠嚴(yán)謹(jǐn)?shù)龀鰜?lái)的可視化效果和空間分析結(jié)果在業(yè)務(wù)層面是說(shuō)得通的。8. 最后的一些經(jīng)驗(yàn)提醒8.1 不要把接口文檔當(dāng)唯一參考百度地圖開(kāi)放平臺(tái)的文檔更新速度跟不上接口的實(shí)際變更速度。文檔里寫(xiě)的參數(shù)實(shí)際調(diào)用時(shí)可能會(huì)多出幾個(gè)默認(rèn)字段文檔里沒(méi)寫(xiě)的限制實(shí)際跑到某個(gè)量級(jí)就會(huì)冒出來(lái)。我的習(xí)慣是每次調(diào)用前把resp.url打出來(lái)看一眼確認(rèn)最終發(fā)出去的請(qǐng)求長(zhǎng)什么樣很多莫名其妙的錯(cuò)誤都是參數(shù)沒(méi)有被正確拼接導(dǎo)致的。8.2 一定要做好日志記錄寫(xiě)日志不是給機(jī)器看的是給你自己看的。我踩過(guò)的最大一個(gè)坑是數(shù)據(jù)爬到一半報(bào)錯(cuò)但錯(cuò)誤信息被吞掉了導(dǎo)致我花了一個(gè)小時(shí)排查才知道是AK過(guò)期了。從那以后我每個(gè)關(guān)鍵步驟都會(huì)加一行print或者logging把當(dāng)前頁(yè)碼、窗口范圍、返回狀態(tài)碼記錄下來(lái)。數(shù)據(jù)出問(wèn)題時(shí)翻日志比猜原因高效太多了。8.3 這個(gè)事深入下去還能做什么說(shuō)實(shí)話(huà)百度地圖小區(qū)邊界爬取這件事技術(shù)難點(diǎn)不算高真正有價(jià)值的是后面那一層拿到坐標(biāo)之后你能不能結(jié)合其他數(shù)據(jù)做出有用的分析。比如把小區(qū)POI和房?jī)r(jià)數(shù)據(jù)進(jìn)行空間關(guān)聯(lián)分析不同區(qū)域的小區(qū)密度與均價(jià)的關(guān)系或者把小區(qū)邊界和公交站點(diǎn)數(shù)據(jù)疊加計(jì)算每個(gè)小區(qū)的公共交通覆蓋率甚至可以把多個(gè)時(shí)間點(diǎn)的POI數(shù)據(jù)做對(duì)比觀察城市擴(kuò)張方向和新區(qū)開(kāi)發(fā)節(jié)奏。數(shù)據(jù)本身不會(huì)說(shuō)話(huà)但你整理好、分析好、可視化好它就能講出不少有意思的故事。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九aV| 欧美日韩国产人人| 丰满熟女一区二区三区在线播放| 久久精品99| 中文字幕一区av| 自拍偷拍 高清无码| 91在线欧色| 黄页视频网站野外| 欧美成熟性爱精品| 国产综合久久久麻桃个| 超碰97日韩| 色欲久久99精品久久| 麻豆久久久久久久久丝袜 | 色色色色网站| 国语对白在线播放视频| 久久成人午夜精品影院| 都市久久精品激情亚洲| 无遮挡一级毛片视频免费的| 99人妻| 人妻娇喘 激情视频| 亚洲欧美国产va在线| 亚洲熟女乱色| 色九九九| 操人妻逼91| 天天综合色| 伊人久久大香大香线蕉中文| 国产精品一级片在线看| 色综合av男人天堂| 美國A片| 中文字幕精品一区二区精| 日本不卡五区| av黄图片在线观看| 狠狠操使劲操| 伊人网青青| 国产亚洲精品激情| 岛国精品视频在线观看| 成人片在线播放| 熟女人妇一区二区三区| 影音先锋中文字幕日本好一区二区| 国产a片操逼| 懂色中文一区二区三区| 欧美亚洲第一页| 日韩操逼HD| 岛国黄色短视频| 黄页网站免费高清在线观看| 9999久久久久| 啊啊啊不要好爽日韩无码一区| 91宗合网| 国产午夜精品理论片一二三区区| 精品国产一区二区三区在线播出| 少妇高潮对白在线观看| 强奸乱亚洲| 久久97| 日日夜夜干| 欧美久久九九| 欧美 综合 亚洲| 亚洲 无码 有码 中文字幕| 精品免费成人久久| 国产无码精品成人| 男人高清无码一区二区| 超踫中文字幕| 国产视频第2页| 夜夜高潮夜夜爽国产伦精品| 美女诱惑久久| av绯色| 欧美日韩性爱视屏免费看了| 黄色AV影视| 亚洲 中文 女同| 久草男人天堂| 91老司机视频| 久草福利在线资源站| 欧美熟妇视频| 欧美在线大香999| 91色花堂| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 亚洲在线网站| 大香蕉五月天| 大干人妻| 操逼大黄片| 亚洲无码99| 人妻 欧美 中文| 清纯唯美综合亚洲| 成人性爱电影网| 91精品国产综合久久久蜜臀| 国产精品天堂| 国产男人又猛又粗又爽| 男人精品天堂一区| 婷婷午夜成人色中色| 欧美另类色图片| 国产丸一视频| 国产精品嫩草影院午夜两性| 蜜桃中文字日产乱幕4区| 久草看看看| 亚洲h片在线免费观看| 六月婷婷五月丁香| 大屁股熟女一区二区三区| 久久东京热久久| 再深点灬舒服灬太大了好硬好爽| 北京美女一区二区| 蜜桃狠狠色伊人亚洲综合网站| 国产精品自在自拍视频| 日韩中文字幕av在线播放| 亚洲全色网| 欧美综合区| 人妻少妇三级| 欧美 日韩 亚洲 春色| 七久久久| 日本操逼视频免费| 亚洲情色第一页| 东北老熟女| jizzjizz欧美| av久日| 啪啪视频亚洲第一| 果冻传媒A片一二三区| 国产99精品一区二区三区免费| 色哟哟国产精品免费网址| 东京男人天堂| 免费AV播放| 欧美精品欧美精品系列 | 97亚洲综合电影| 夫妻日逼| 精品熟女一区=区三区| 久久99九九九九6666免费观看软件| 欧美性爱伊人| 78m成人视线| 久久ww| 久热这里只有精品9| 99久久99九九99九九九| 黄色成年| 美女露胸露尿口| 日韩成人性日韩成人性爱视频在线免费观看| 俺去也婷婷| 欧美91变态| 殴美,日韩国产伦精品| 国产粉嫩蜜臀av一区二区三区| 玖玖97综合| 天天做天天爱夜夜爽毛片试看| 九九九九九九九九九九九免费国产| 夜色综合| 中文一区在线日| 在线无码操| 超碰这里有精品| 5278欧美一区二区三区| 在线观看高清AV| 黑人精品久久97| 欧美麻豆成人同性GⅤ在线| …中文字幕亚洲乱,97人妻无码费视…| 成人午夜视频免费播放| 精品久久久久久久| 色婷婷综合久久久久中文一区二区| 91大神精品长腿在线观看网站| 99re只有精品| 日本韩欧美在线播放a| 天干天干天干天天做| av天堂影视中文在字幕在线中文| 精品久久久av无码免费| 色天使AV天堂| 欧洲Au麻豆| 亚洲小电影免费涩涩成人在线高清| 日本性一区| 天天干天天干天天干| 97超碰站| 九九九精品色乱九九九| 少妇二级| 国产福利小视频高清在线观看| 大香蕉狠狠爱| 动漫av中文| 天天狠| 牛黄色久午久| 欧美人妻一区| 免费家庭乱伦视频| 亚洲精品日日夜夜52| 99热这里只有精品18| 蜜臀人妻少妇久久在线观看| 色婷婷亚洲婷婷| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 少妇精品| 东京热伊久| 1区2区3区中文字幕日韩| 国产超碰人人爽人人做| 一区二区三区成人高清视频| 亚洲色图欧美一区二区不卡| 国产精品久久泡妞网站| 夜夜高潮夜夜爽国产伦精品| 伊人玖玖网| 欧美三级不卡| 欧美黑人与女人91~| AV电影在线播放| 无码高清专| 日韩激情无码影院| 东北少妇高潮zzzz| 国产日韩久久| 97超碰站| 夜草网站| 日韩精品字幕| 国产无码三级视频在线观看| 亚洲欧美日韩中文播放| 人妻丝袜日本| 国产一区在线看| 91久久国外网| 天堂精品| 久久久精精精| 亚洲一区二区av| 日天天九九天堂666| 2003天天干夜夜操| 女人香蕉久久毛毛片精品| 中文日韩欧美熟| 试看福利| 99re6在线视频精品免费完整版安卓版| 精品视频专区| 中文字幕人乱码中文字的预防方法 | 亚洲揄拍网| 超碰性爱97| 国产传媒日本欧美专区| 一级黄碟在线观看| 2017天天透天天通天天擦| 欧美一区二区三区黄色影视| 亚洲国产中文字幕| 好属操| 综合 亚洲 欧美| 密臀视频三区免费网站| 日本操逼无码| 岛国网址国产 | 91色射| 97碰碰色| 中国AAAAAA黄色片| 久久无码成人| 久热伊人99re| 亚洲综合69| 欧美第二页午夜| 玖玖爱影院| 婷婷色色五月天福利| 亚洲啪AⅤ永久无码| 黄片直播三级黄片两女一男| 日韩精品一二三四| 亚州春色| 青青青在线高清视频在线一二三四区 | 日韩av在线精品观看| 久久精品久久久久久久久| 久久国产乱子伦精品免费女人| 国产熟女完整版中字| 五月丁香婷婷综合网| 大香交伊人网| 亚洲久久东京热一二三四五区视频| 日韩成人小视频| 国产91福利小视频在线观看| 亚洲情色中文字幕一区| 中文在线久久字幕| 久久亚洲一区女同性恋中文字幕| 国产美女在线精品免费看| 国产专区第一页| 久久草大香蕉| 91青青在线视频| 日日超碰亚洲| 中文字幕av亚洲在线| 怡红院视频在线| SUV一区二区在线看| 亚洲天堂男| 乱论91| 91狠狠综合久久久久久| 日韩欧美久久婷婷网站| 国产无码久久高清| 亚洲午夜av| 天天天天做夜夜夜夜做| 亚洲精品97| 操屄不卡视频| 欧美第二页午夜| 国产高清午夜成人在线观看| 亚欧精品久久久久久久久久久| 久久精品视| 亚州熟女乱伦| 欧美美女自慰一区二区三区| 极品色综合| 国产精品无码在线| 亚洲综合贴图91 | 亚洲美女精品| 78精品在线| 日韩性爱免费视频在线网站| 丰满欧美放荡少妇在线| 国产av美女被艹的乱叫| 人妻在线大香蕉| 97国产人人| 9+1视频网址| 久久婷婷苹果| 9999免费精彩视频| 亚洲激情综合另类男同| 久久久久久久78| 亚洲97在线观看| 色五月激情网| 中文字幕乱妇免费视频| 97福利视频| 在线 欧美 亚洲| 中文字幕日韩人妻视频一区二区三区 | 有码免费观看| 国产91av在线播放| 国产丸一视频| 国产乱伦性爱AV| 激情情色五月天| 亚洲av无线观看| 久久综合久色欧美综合狠狠| 性色av网站| 国产一区二区精品在线视频| 欧美性爱一级操| 精品久操| 九九九九九九亚洲| 无码区蜜乳| 欧亚久久偷拍视频| 午夜精品探花| 色色九区| 2019AV天堂| 日本精品无码三级网站| 欧美日韩中文字幕不卡| 九九热九九热| 老外又粗又长一晚做五次| 国产农村妇女精品一| 一区二区三区亚洲| 亚洲男人天堂2| 天天综合色| 国产精品美女久久久久久网站| 精品人妻一区二区免费蜜桃| 日韩av不卡在线观看| 日韩精品亚洲一二三| 亚州伊人色综台| 高清国产无码av| 欧美高潮| 亚洲伊人久久精品狠狠在线| 亚洲国产成人精品无码专区| 不卡日本一区二区| 一本一首道人妻少妇免费久久| 三级网色| 日韩一级欧美一级国产一级台湾| 日本高清加勒比| 韩日精品四区| 国产精品久久久久亚洲av| 蜜桃香蕉久草精品在线| 99中出在线| 日本视频一区二区三区| 国产精品久久久啊| 91精品操美女| 欧美色日| 伊人色综合超碰| 黄色毛片A片| 蜜乳中文字幕a在线| 亚洲色图综合网| 天天色悠悠激情| 岛国艾薇凹凸视频天堂| 人人搞人人插人人操| 中文字幕乱偷人妻久久艾草网| 五月天婷婷成人网| 全球成人中文在线| 少妇一区二区三区精选| 69一区二区| 五月天欧美色图| 啊好爽受不了无码| 亚洲午夜免费狠狠干| 日韩乱伦AⅤ| 91精片| 久久婷婷一区| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 日韩精品在线观看网站| www.亚洲成人一区| 天天综合中文字幕 91| 视频二区熟女人妻| 亚洲色综合| 少妇 综合| 欧美日韩人妻精品一区二区三区| 99久久com免费视频′| 最新国产精品| 91欧美大片| 91伊人久| 天天干天天舔| 四虎精品永久在线播放| 精品人妻av区天天看片| 人妻激情视频| 色婷婷A V一二三四区麻豆综合| 神马午夜久久久| 久久综合乱子伦国产免费| 五月丁香网站| 男人兔费天堂| 激情自拍 校园春色| 亚洲五月天激情| 探花激情视频| 91九色首页| www.丁香五月| 欧美嫩性色| 国产欧美日韩在线观看麻豆传媒公司| 99青草| 91国产精品熟女| 97久久久久久久精| 天天综合影院91| 在线 亚洲 网爆 自拍| 91人妻视频在线| 78p欧美| 伊人国产视频| 美女骚尻视频| 国产成人bd在线观看| 日日噜噜夜夜狠狠视频无| se01国产在线视频| 熟妇操花| 啪啪视频mP4| 少妇被玩视频二三区| 色大香蕉97N| 国产自啪精品视频网站黑丝| 国产日韩美女小穴视频网站不卡| 亚洲综合首页| 岛国激情视频在线观看| 日本性爱不卡视频| 亚洲天堂区| 图色综合网| 男人的天堂久久狠| 浓厚中出中文字幕在线| 青青草精玖玖69精品| 东京热精品97综合网| 99福利社| 91视频精品| 综合久久久久久久综合网| 成人性爱高清视频免费看| 午夜婷婷| 久草在| 96超碰网| 精品成人亚洲午夜电影| 大香蕉九九| 国产污视频麻豆传媒一区二区| 精品一二三区女同 | 日韩视频中文字幕| 婷婷视频在线免费观看| 手机av天堂久久久久| 天天看片麻豆| 精品九九九九| 秋霞一级视频在线观看免费| 青青操在线亚洲视频观看欧美在线| 99日免费视频中文字幕| 97超碰人人模人人拍人人| 欧美成人性爱视频免费观看| 精品四五区| 综合性视频99| AV在线性爱| 亚洲AV免费在线| 亚洲色悠悠久久88| 麻豆三极片| 欧美精品日韩一区二区| 精品一区二区三区四区外站 | 人妻天堂综合网| 日韩资源网| 水多多映视AV| 91蜜桃婷婷狠狠久久综合9色| 日韩美女,国产传媒,视频一区| 另类欧美色| 亚洲成人福利电影免费 | 又大又长又粗又爽又黄| 欧美少妇一区二区三区| 91热| 婷婷五月丁香五月| 熟女熟妇伦久久影院毛片一区二区| 秋霞一级鲁丝片A片| 猛交交| 亚洲 日本 不卡| 国产一区二区三区导航| 色男人色天堂东京热| 国产一级舔足在线观看| 人人乐大香蕉| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 久久久久久久久久久免费精品| 精品国产一区二区三区av在线资源| 97在线欧| 狠狠综合网| 婷婷五月天色网| 欧美麻豆成人同性GⅤ在线| 性爱AV天堂| 伊人久久综合影院| 97热视频在线观看| 免费毛片在线播放| 久久九九97| 99精品免费| 清纯唯美亚洲综合| 欧美专利1区2区3区4区5区免费| 熟女精品日韩一区二区三区| 少妇二级| 97资源视频| 超碰天天操| av天堂手机版追回| 91性片| WWW4虎| 久久成人国产精品| 青青草啪啪网| 国产精品无码在线| 亚洲天堂2020| 黄总AV色图| 亚洲欧美综合区自拍另类| 超碰久久网| 亚欧高清v| 国产精品诱惑| 狠狠2050在线观看| 色婷婷香蕉| 亚洲毛片基地专区| 亚洲色图国产另类| 久久久久久AⅤ无码免费肉站| KK色在线影院| 久草资源欧美在线视频| 国产精品青草综合久久| 明星性猛交ⅹxxx乱大交| 亚洲欧美setu| 五月天婷婷久久| 国产精品福利资源在线尤物| 91色色综合| 狠狠色综合网| 中国一级操逼视频| 欧美综合色,www| 亚洲国产一级中文综合久久天堂在线免费观看 | 欧美日韩香蕉| a片自拍直播视频| 综合激情一一91| 黄色污污污污污污网站| 99久久e免费热视| 91综合网在线| 久久精品91| 韩日男人的天堂| 深夜激情无码| 欧美午夜视频免费观看| 抽插亚洲无码| 日本中文字幕一区| 亚洲情色五月天 | 美女人妻色网站| 抽插无码高清一区| 国产女s强制榨精视频| 国产精品午夜福利| 国产欧美成人精品| 情色五月天久久久| 伊人AAA| 乱伦AVxx| 国产毛片在线| 99这里只有精品国产| 2017天天插| 91激情国产| 大香蕉啪啪啪啪在线| 天天流夜夜操| 久久怡红院| 日韩AV熟女乱伦| 思思热国产在线视频| 91av熟女人妻| 老司机福利青青草| 丁香九月婷婷| 人妻天堂三区| 91欧美www| 中文字幕欧美精品亚洲日韩蜜臀| 免费亚洲国产精品久久一区| 丝袜天堂| 求求你操操我| 伊人丝袜美腿高跟在线观看高清| 欧美性战999| 91网站18在线观看| 久久精品人体| 男人的天堂2018东京热啪啪啪| 无套内射性感少妇视频| av天堂手机版追回| 久久露脸国产老熟女| 亚洲日韩美女中文字幕乱| 天天干干天天干干| 美女极品一区二区三区| 久久久亚洲欧美综合| 综合在线导航一区| 国产午夜无码片在线观看影视| 在线一道啪| 精品久久久久av影院| 精品毛片av一区二区| 亚洲欧洲中文日韩女优乱码| 久96热在线观看视频| 人人搞人人插人人操| 天天日天天操天天射河南省| 性夜影院爽黄A爽免费动漫| 久久AV无码AV| 久久无码一区二区二三区性色| 成人影院永久免费观看网址| 乱伦图av| AA丁香综合激情| 天天添天天干电影| 亚洲视频,小说| 人妻黑丝袜电影| 婷婷探花久久精品一区| 日本色日夜干| 国产精品一区av在线| 夜嗨影院| 素人播放一区| 色综和网| 精品少妇99| 亚洲婷婷丁香在线| 日本操大逼| 久热9| 哈哈操电影AV| 国产精品动态一区二区三区四四| 欧美色图欧美| 秋霞免费无码视频日韩A片| 色婷婷激一区二区三区| 97人人草| AV99热18这里只有精品| 精品日日人妻| 成 人片 黄色大片| 国产亚洲99久久精品| 强上我不卡卡| 亚洲做性| 亚洲,日韩,欧美,成人播放| 黄色片大香蕉| 亚洲精品欧美专业| 99热婷婷一区二区三| 日欧操屄视频| 日日日啊啊啊| www男人天堂| 日本性爱欧美性爱| 欧美视频在线第3页| julia中文字幕在线观看| 欧色网址| 在线观看色视频| 九九九综合精品| 91久久久久| 国产毛片久久久久久久| 丝袜AV一二三区| 美女上床网站| 精品一区二区成人| 国产熟女一区二区丰满| 免费视频一二三区| 日本性爱不卡视频| 精品乱码久久久久| 久久精品国产Aⅴ| 成人在线视频网| 日韩精品三级片长长久久| 色99999| 97人人草| 人妻第一页| 在线观看综合精品亚洲| 九区国产| 美国一区二区三区视频| 久久久久久中文版| 国产精品久久天天干| 91久久国产综合久久| 97色欧洲| 久久综合婷婷| 日韩精品亚洲一二三| 大香蕉一线视频| 人妻少妇精品久久久| 日韩无码操逼片| 色爱欲亚洲| 国产婷婷综合在线观看| 久久9 9 9精品| 日本韩高清无砖码22o| 天天日天天舔天天喷天天射| 91bbbbbb| 女色视频社区| jazzjazz国产精品麻豆| 欧洲中文字幕| 天天看精品动漫视频一区| 亚洲中文字幕有码视频一区二区三区| 精品九九| 国产青视频| 精品九九国产无码| 91人妻久久久久久久久久久久久| 亚洲天堂7777| 国产自偷| 七久久久| 欧美在线永久天堂| 都市激情人妻一区二区青青操视频| 成人av影院在线观看| 青青草乱入乱欲视频在线观看| 中文字幕精品一区欧美| 丝袜美女诱惑 91 视频| 精品伊人久久久大香线蕉小说| 综合情欲网| 91久热| 永久电影三级在线观看| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 少妇二级| 国产第12页| 欧美色图在线视频少妇| 狠狠干狠狠干| 日韩中文字幕视频| 久草线上视频免费看| 亚洲激情综合| 波多野结衣AV无码一区| 亚洲男人天堂2| 日韩欧美女优电影| 69少妇一区二区| 蜜臀在线网站| 曰本精品久久久| 免费A V在线播放| 日韩人妻丝袜中文字幕| 美女诱惑在线一区| 99婷婷| 国产在线视频二区| 免费视频观看60秒| 超碰 av 女人天堂| 在线不卡视频| 亚洲免费在线探花| 天久久久噜噜噜久久国产精品爽爽 | 国产人妖视频一区在线观看| 伊人欧美大香蕉视频| 99中出在线| 黑人嘿嘿嘿超爽免费视频| 蜜臀99久久精品久久久久| 国产美女激情| 丝袜美腿欧美| 亚洲一区二区三区欧美日韩| 国产精品精品系列在线观看| 色欧美色交综合| 青青草大香蕉在线视频| 激情综合久久| 国产理论视频在线播放| av黄图片在线观看| 综合网少妇| 色老牛| 欧美综合第一| 亚洲色吧网| 色青青久久影视| 久久欲| 欧差乱伦二三| 91亚洲人| 欧美综合1性辶| 精品人妻伦一区二区三区久久| 一二三啪啪专区| 色情婷婷| 久操热线| 亚洲一区中文字幕一区| 久热香蕉精品在线视频| 亚洲h片在线免费观看| 欧美精品宗合| 天天久久| 97欧美综合| 欧美综合1性辶| 91久热| 蜜臀99久久精品| 国产精品一级二级在线| 日韩av色图综合| AV天堂男人的天堂| 暖暖精品二区三区观看| 日韩乱码Av| 一色网男人的天堂| 91 在线亚洲| 亚洲性爱高潮影院| 性爱动态120秒| 91麻豆天美国产欧美日| 欧美日韩超碰在线| 欧美精品另类人妖xxxx| 黄页18禁| 九月AV| 亚洲美女色图| 成人在线午夜视频一区| 亚洲色图伊人网| 99re在线视频国产| 激情文学亚洲| 992视频一区| 亚洲色图欧美| 亚洲欧洲自拍图片专区满春格| 视频一区二区三区精品| 亚洲激情在线观看一区| 91午夜无码| 亚洲av淫乱| 久久激情五月| 操九九九九九九| 精品国产91久久久久久一区黄无| 蜜臀AV成人精品蜜臀| 久久宗合亚洲| 欧洲亚洲人妻无码久久三区四区| 熟妇色99| 国产精品嫩草影院午夜两性| 亚洲天堂AV在线播放| 操逼网免费无码视频| 色久综合| 99天天超碰| 亚洲丝袜99| 91爱剪切久久| 国产传媒午夜理伦精品| 男女激情黄色网址| 成人情色一区二区| 日韩精品9999| 久操频道免费在线呗看| 七月丁香婷婷| 口爆吞精在线观看| 韩日精品四区| 91久久久老司机| 欧美亚洲今日在线| 免费自拍三级综合| 桃色五月天| 久久精品国产99国产精品亚洲| 呻吟 欧美 日本 中出| 亚洲在线91| 欧美色性爱| 亚洲中文字幕噜噜噜久久久| 97一区二压| 九久9精品| 凹凸久久人人| 800zy一区二区| 好一吊区二区| 国产真乱mangent| 婷婷五月色| 极品久久久久久久久久久久久久| 九久9精品| 黄页视频网站野外| AV天堂电影网| 伊人九九| 睡产熟女乱伦| 黄日韩| yw尤物av无码点击进入麻豆| 国产成人无码网站在线视频| 白丝少妇一区二区| 97天天摸天天爽| 日韩精品在线观看网站| 亚洲综合影片| 97天天综合| 岛国成人av在线播放网址| 丝袜天堂| 欧美Ⅴ性爱| 男人的天堂不卡一区二区 | 婷婷色色五月天福利| 久久婷婷精品| 婷婷久久久精品| 国产精品嫩草影院免费| 双插在线| 妇女性内射冈站HDWWWCOM| 920日本午夜免费| 成年在线视频日本亚洲在线视频区精品江靖宇公司| 国产91av在线播放| 91美腿丝袜在线观看| 欧美+日产+中文| 色五月婷婷久久| 蜜桃AV天堂| www欧美性爱| 丰满欧美放荡少妇在线| 粉嫩粉嫩一区性色AV片| 欧美日韩青操| 国产成年精品高清在线观看91| 久久伊人网视频一区二区三区| 亚洲综合20p| 日韩另类色图| 加勒比综合网| 久久久工口| 日本阿v天堂在线观看| 天天综合~91入口| 97在线观看免费视频| 亚洲情色电影网| 久久91| 91丝袜美女| 久艾草在线精品视频在线观看| 亚洲综合性感在线| 久久久久久久久久va| 国产精品网站免费| 亚洲三区视频| 综合网亚洲1| 婷婷综合激情| 色汉综合| 日夜久久久九九九久| 午夜国产乱伦视频| 天天操天天日天天干| 亚洲精品aa久久伊人| 0755午夜福利视频| 亚洲少妇色| 高清国产无码av| 粉嫩久久久久| 伊人久久婷婷| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 亚洲aw毛茸茸在线| 人人艹亚洲| 天堂av最新电影网| 女优视频第10页| 亚洲成aⅴ人片不卡无码| 色哟哟1区2区| 色一情一乱一乱一区91Av| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 日本一区二区亚洲综合| 日韩电影天堂视频二区三区| 全球成人中文在线| 九九九九热| 欧美亚州色的图| 五月丁香| 久久久久久亚洲中文| 欧美最婬乱婬爆婬牲视频| 亚洲人成网www| 一级二级三级黑人无码| 欧美啪啪天堂| 蜜臀AV成人精品蜜臀AV久久| 精品国产久热在线观看| 九九九久久久| 日本性一区| 视频在线观看一二三区| 国产精品久久久久久片| 91人妻在线视频| 制服诱惑亚洲一区二区三区在线观看| 狠狠干综合| 日韩中文字幕人妻视频| 日韩综合色图| 俞拍自拍| 亚洲丝袜色图| 综合婷婷| 国产精品久久久久久无码红治院| 亚州性色| 欧亚韩国999| 欧美婷婷久久| 五月丁香啪| 久久激情亚洲精品无码?V| 国产强奸乱伦第1页| 国产精品第一页国产大屁股视频免费区i| 久久男人的天堂国产| 国产女人操逼视频| 人人干人人操人人爱| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 亚洲色图欧美色图制服丝袜| 免费视频a级毛片免费视频| 久久透逼视频| 69精品| 欧美少妇高潮| 98福利在线视频| 9超碰免费| 亚洲天堂另类美腿| 涩涩五月天| 欧美日韩第一页| 国产91精品福利在线| 成人小说另类在线| 九九碰九九爱97超| 大香蕉草草| 国产精品69久久久久久久| 天天澡天天爽日日av| 欧美综合第一| 啊啊啊啊啊在线观看网址 | 啊啊啊啊嗯嗯嗯用力好爽| 久久黄色视频一区二区三区| 麻豆久久一区二区三区| 日韩99999| 欧美最婬乱婬爆婬牲视频| 色天堂在线观看| 超碰碰激情97+久| 精品国产99| 欧美高清性猛交| 免費人妻夜夜爽天天爽爽一区| 午夜精品一区二区三区三上悠亚| 97碰在线视频| 色啪网| 99精品久久| 99操视频| www.久久99| 99∨VTV| 亚州精人品大香蕉| 99综合网| 亚洲夜色在线| 国产精品小视频一区二区三区| 欧美 亚洲 综合 制服| 六六久久日韩不卡| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 九月色婷婷| 97爱爱爱综合| 亚洲 欧美 另类 综合 偷拍| 夜夜狠狠躁日日躁色视频| 亚洲人妖网| 99日免费视频中文字幕| 夜夜嗨TV| 久久久久久久97| 自拍偷拍第26| 久操网无码在线| 91精品伊人久久久大香线蕉91| 欧美黄片视频在线观看免费 | 青青草国产一区二区三区| 男人天堂最新手机版在线青青草| 久久久久久久久9| 亚洲精品99999| 久久av无码| 国精精品无码一二三区水多多| 97人人模人人爽人人| 不卡在线一区,精品一区二区三区中| 搡老女人老妇女老妇老熟女怎么读| 啊啊啊好湿久久| 我中文字幕6区| 蜜臀99久久精品久久久久久| 中文字幕在线观看网址| 一二三四视频中文字幕在线看| 丰满高潮18xxxx| 啊啊啊啊嗯嗯嗯用力好爽| 久久综合精品一区二区三区| 在线情色电影 91大| 中文字幕丝袜| 老司机深夜18禁污污网站| 欧美刺激色黄片免费看| 亚洲有码 视频一区| 久久爱超碰网| 欧美劲爆第一页| 99国产精品视频尤物| 日本99视频| 欧美久久婷婷| 亚洲黄色AV电影| 高潮毛片无遮挡高清免费| 国产欧美日韩在线不卡第一页| 午夜福利久久久噜久噜久久综合| 久久骚| 国产在线综合福利网站| 色色色色网站| 美女91在线观看| 男人综合网| 五十路三级片| 无码人妻一区二区一牛影视| 97jingpin| 青娱乐老司机视频| 成人电影一区| 亚洲性感丝袜诱惑在线观看| 婷婷超| 在线播放中文字幕| 98精品国产乱码久久久久久| 欧美美女视频| 最新啪啪视频| 五十路熟女工口 | 日韩情色视频| 一本色道久久综合亚洲二区三区| 欧美日韩啪啪电影| 射 色综合| 东北女人性交| 无码人妻丰满热妇又大又粗| 91网18| 国产精品人妻无码久久久老鸭窝 | 夜草欧美| 五月天婷婷在线看| 禁片 高清 在线观看视频网站| 91天天美女| 美女尤物人人操| 人人超碰在线观看黄| 亚洲国产另类在线中文| 色蜜AV| 欧美色视| 色婷婷影院| 熟人人妻少妇精品久久| 破苞ⅩXXX性无码动漫无码| 日日夜夜模| 国产精品黄色三级av| 神马午夜久久久| 欧美Ⅴ性爱| 免費人妻夜夜爽天天爽爽一区| 97免费在线| 熟妇熟女亚洲天堂网| 97这里有精品| 99精品网| 妇女一区二区三区| 婷婷五月天伊人| 天天操妹子| 亚洲麻豆精品二区三区| 亚洲熟女综合一区二区| 熟妇在线视频一区二区| 91 偷| 五月天激情网图片| 久久综合97| 91亚洲精品青草| 久久性爱视频免费看| 午夜久久一区二区无码中出| 免费成人自拍视频在线| 91黑丝少妇| 18禁在线视频| 欧美变态激情网| 夜间福利片1000无码| 加勒比av网| 六月丁香啪啪| 丁香七月婷婷| 区二区亚洲婷| 在线视频免费播放一区| 夜夜嗨老熟女AV一区二区三区| 99精品久久久久久久婷婷蜜桃| 精品久久97| 色一射色一射| 国产美女口爆吞精视频| 91爱看| 久久激情综合| 亚洲爽图| 国产精品久久久久久久久久久久久久久久 | 俞拍自拍| 五月天婷婷综合网| 青春草莓视频在线观看网址| 神马午夜久久久| 无码 有码 国产18p| 日韩熟女精一区二区三区不卡| 啊啊啊好湿国产一二| 国产精品一区午夜福利| 日韩欧美麻豆 | 91精品丝袜久久久久久| 射丝袜高跟鞋99| 高跟丝袜AV专区国产| 极品肉射| 中国小夫妻勾搭露脸淫荡对白| 国产欧美日韩在线不卡第一页| 男女一进一出视频久久| 中文字幕伊人| 久久秀这里有精品| 久久久久久久国产视频| 97网色| 青青草字幕AV| 麻豆天美国美国产AV| 天天躁日日躁xxxxx| 熟妇色99| 偷拍综合亚洲| 天天看综合网| 成人免费福利在线观看| 男人的天堂 在线一区| 欧亚揄拍偷拍精品视频 | 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 九九久久国产精品| 综合色色网| 尤物视频一区| 亚洲在线91| 国产又长又大又粗的视频| 爱欲AV| 日韩精品99999| 欧美一级黄色18片免费看| 久久99网站| 久久久久久亚洲Av无码| juliaann欧美丝袜办公室| 亚洲日韩欧美一区二区| 一区久久久二区| 91丨九色丨国产打屁股| 久久久久久日韩| 国内毛片欧美香蕉精品| 最新AV在线| 亚洲校园激情| 超碰日韩美妻| 无码视频一区二区| 欧美日日网| 五月丁香激情综合| 久久精品国产96精品亚洲拳交| 欧美的性爱网站免费| 欧美天天| 亚州性色| 青青操在线视频| 亚洲熟妇白浆无码AV| 是还免费视频1727我| 青青草精玖玖69精品| 91AV老熟女视频| 另类小说五月天| 中文字幕在线高清男人的天堂| 性色av蜜臀av色欲aV| 黄色香蕉视频网站一区| 天天澡天天爽日日AV| 黄页av| 精品对白久久不卡| 97碰碰色| 日韩精品人妻一区二区| 蜜臀99久久精品久久久久久| 91亚洲丝袜| 91处女在线视频| 欧美色图91p| 欧美91精彩| 九九九九九九视频| 久久熟女久| 制服丝袜第二页| 欧美在线|亚洲| 亚洲男人天堂视频| 久久精品人妻一区二区三区| 欧美在线|亚洲| 后入式五六区| 骚日日av| 快灬快灬 一下爽蜜桃在线观看 | 五月天婷婷成人网| 99色视频| 久久国产精品91| 婷婷伊人一区| 日韩国产十八禁| 国产精品天干天干综合网麻豆| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 国产精品一区在线播放| 免费伦费视频在线观看| 青草青草久热| 99操逼|