国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

數(shù)據(jù)自動(dòng)抓取到底有多簡(jiǎn)單?

共 12660字,需瀏覽 26分鐘

 ·

2021-07-31 03:16

說(shuō)到數(shù)據(jù)自動(dòng)抓取,很多人可能會(huì)聯(lián)想到網(wǎng)絡(luò)爬蟲,不自覺地就會(huì)認(rèn)為這超出了自己的能力圈邊界。但是,當(dāng)我們對(duì)互聯(lián)網(wǎng)上發(fā)現(xiàn)的某些數(shù)據(jù)感興趣的時(shí)候,我們知道如何自動(dòng)保存這些網(wǎng)頁(yè)數(shù)據(jù)以供日后數(shù)據(jù)分析,節(jié)省下來(lái)手工復(fù)制下載的時(shí)間,喝杯咖啡、刷會(huì)兒抖音,是不是很香?web 開發(fā)有兩個(gè)基本概念:前端和后端。簡(jiǎn)單來(lái)說(shuō),瀏覽器端、客戶端就是前端,提供真實(shí)服務(wù)的服務(wù)器端就是后端。網(wǎng)頁(yè)開發(fā)模式主要分為兩類:前后端分離模式和非前后端分離模式。前后端分離模式,是指前端通過(guò) AJAX 向后端 API 服務(wù)發(fā)送數(shù)據(jù)請(qǐng)求,后端響應(yīng)請(qǐng)求并返回?cái)?shù)據(jù)給前端,前端使用后端返回的數(shù)據(jù)(通常是 JSON 數(shù)據(jù))渲染呈現(xiàn)網(wǎng)頁(yè)。非前后端分離模式是由服務(wù)器端渲染生成 HTML 網(wǎng)頁(yè),直接發(fā)送給瀏覽器端渲染。前后端分離模式是當(dāng)前網(wǎng)頁(yè)開發(fā)的主流模式,互聯(lián)網(wǎng)大廠幾乎都使用這種模式,但是一些政府事業(yè)單位的網(wǎng)站以外包為主,更新迭代緩慢,非前后端分離模式較多。關(guān)于這兩種開發(fā)模式,只需當(dāng)作科普理解即可。CSV vs JSONJSON 數(shù)據(jù)是 web 開發(fā)中經(jīng)常用到的數(shù)據(jù)格式,很多人經(jīng)常使用 CSV 格式,但是對(duì) JSON 數(shù)據(jù)格式不太熟悉?,F(xiàn)在有很多在線工具可以輕松實(shí)現(xiàn) CSV 格式與 JSON 格式之間的相互轉(zhuǎn)換。便于理解 JSON 數(shù)據(jù),這里簡(jiǎn)單對(duì)比一下 CSV 和 JSON。
CSV 格式:

ID,Name,Season,Points1,LeBron James,2019-20,25.21,LeBron James,2018-19,27.41,LeBron James,2017-18,27.
JSON格式:
[  { "id": 1, "name": "LeBron James", "season": "2019-20", "points": 25.2 },  { "id": 1, "name": "LeBron James", "season": "2018-19", "points": 27.4 },  { "id": 1, "name": "LeBron James", "season": "2017-18", "points": 27.5 }]

可以看出,相比CSV,JSON有更多的符號(hào)以及重復(fù)的表頭字段名。雖然這個(gè)例子是一種比較常見的 JSON 格式,但有時(shí)候 JSON 也會(huì)寫成 和 CSV 相似的樣式,比如 stats.nba.com 這個(gè)網(wǎng)站里使用的樣式:

{  "headers": ["id", "name", "season", "points"],  "rows": [    [1, "LeBron James", "2019-20", 25.2],    [1, "LeBron James", "2018-19", 27.4],    [1, "LeBron James", "2017-18", 27.5]  ]}
直接使用 API 爬取數(shù)據(jù)現(xiàn)在流行的前后端分離開發(fā)模式下,web 網(wǎng)頁(yè)應(yīng)用一般通過(guò) AJAX 向后端 API 服務(wù)接口發(fā)送數(shù)據(jù)請(qǐng)求,前端使用 API 返回的數(shù)據(jù)(通常是 JSON 格式)渲染呈現(xiàn)網(wǎng)頁(yè)。因此,我們只要找到返回請(qǐng)求數(shù)據(jù)的 API 接口,并模擬發(fā)送請(qǐng)求給這個(gè) API,我們就能拿到想要的數(shù)據(jù)了。這里我們用 stats.nba.com 這個(gè)網(wǎng)站為例,使用 Node.js 來(lái)演示如何使用 API 自動(dòng)抓取 NBA 籃球運(yùn)動(dòng)員的年度職業(yè)數(shù)據(jù)。1. 檢查數(shù)據(jù)是否動(dòng)態(tài)加載首先,我們使用 Chrome 瀏覽器去 stats.nba.com 網(wǎng)站上找到詹姆斯的數(shù)據(jù)主頁(yè)https://www.nba.com/stats/player/2544/

52c9667f3382e07082b4aec2baf85a4e.webp

表格內(nèi)的數(shù)據(jù)是我們的目標(biāo)數(shù)據(jù),我們要做的是確認(rèn)這個(gè)表格里的數(shù)據(jù)是在HTML網(wǎng)頁(yè)中的靜態(tài)數(shù)據(jù),還是通過(guò) API 動(dòng)態(tài)加載的數(shù)據(jù)。那要怎么確認(rèn)呢?我們使用 Chrome 瀏覽器,打開頁(yè)面,右鍵單擊網(wǎng)頁(yè)-顯示網(wǎng)頁(yè)源代碼,查看網(wǎng)頁(yè)源代碼。

5f628bdf48c7d9ec9976b996c18d5d2c.webp

15b73d2daebf13bbc4612af68966f626.webp

通過(guò)?Ctrl+F?搜索可以發(fā)現(xiàn),我們?cè)谠创a里是找不到我們需要的表格數(shù)據(jù)的(比如 2020-21,LAL),這說(shuō)明了表格數(shù)據(jù)是通過(guò) API 動(dòng)態(tài)加載的。
2.?尋找返回?cái)?shù)據(jù)的?API 接口數(shù)據(jù)不在 HTML頁(yè)面里,到底在哪里呢?我們可以使用瀏覽器的開發(fā)人員工具尋找線索。在網(wǎng)頁(yè)上鼠標(biāo)單擊右鍵,選擇?檢查?菜單調(diào)出開發(fā)人員工具。

d773f8ac56e591a0ca07040313dd9142.webp

打開后默認(rèn)一般是 Elements 選項(xiàng)卡,我們需要選擇?Network 選項(xiàng)卡。

24b03fa13f6b5bb59dea29cb11d0c3c0.webp

打開 Network 后,選擇?XHR 并重新刷新頁(yè)面,這樣我們就能看到這個(gè)頁(yè)面所有的 API 數(shù)據(jù)請(qǐng)求。

a3d84b8ff5c47377ca6a0d231269d684.webp

接下來(lái)就需要考驗(yàn)我們的分析能力了,逐個(gè)點(diǎn)擊這些數(shù)據(jù)請(qǐng)求,根據(jù)數(shù)據(jù)預(yù)覽?preview 來(lái)確定哪一個(gè)數(shù)據(jù)請(qǐng)求是我們要找的 API 接口。

c995de3917b884320e8dc95d514556c5.webp

我們結(jié)合表格的名字以及表格數(shù)據(jù)等多方面的特征,經(jīng)過(guò)分析,確定圖中紅框的數(shù)據(jù)請(qǐng)求接口是我們需要的 API 接口。
3. 寫一個(gè) Node.js 腳本自動(dòng)爬取多頁(yè)面數(shù)據(jù)自動(dòng)爬取數(shù)據(jù)你可以使用任何語(yǔ)言,這里只是以 node.js 為例,給大家演示。安裝 request 庫(kù)
npm init -ynpm install --save request request-promise-native
復(fù)制下面代碼到 index.js 文件
const rp = require("request-promise-native");const fs = require("fs");async function main() {  console.log("Making API Request...");  // request the data from the JSON API  const results = await rp({????uri:?"https://stats.nba.com/stats/playerdashboardbyyearoveryear?DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerID=2544&PlusMinus=N&Rank=N&Season=2020-21&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&Split=yoy&VsConference=&VsDivision=" ,    headers: {      "Connection": "keep-alive",      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",      "x-nba-stats-origin": "stats",      "Referer": "https://stats.nba.com/player/2544/"    },    json: true  });  console.log("Got results =", results);  // save the JSON to disk  await fs.promises.writeFile("output.json", JSON.stringify(results, null, 2));  console.log("Done!")}// start the main scriptmain();
命令窗口運(yùn)行腳本
node index.js
這樣,我們就獲取了詹姆斯的職業(yè)數(shù)據(jù),但是這還不夠,如果我們能一起獲得其他籃球運(yùn)動(dòng)員的職業(yè)數(shù)據(jù),才是真正的提高效率??匆幌挛覀冋业降臄?shù)據(jù)請(qǐng)求 API 路徑,這里有個(gè) PlayerID 的參數(shù)
https://stats.nba.com/stats/playerdashboardbyyearoveryear?
DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&
Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&
PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&
PlayerID=2544&
PlusMinus=N&Rank=N&Season=2019-20&SeasonSegment=&
SeasonType=Regular+Season&ShotClockRange=&Split=yoy&
VsConference=&VsDivision=
對(duì)比其他球員職業(yè)數(shù)據(jù)的 API 接口路徑,發(fā)現(xiàn)只要修改這個(gè) playerID 就可以變成對(duì)應(yīng)球員的 API 接口。根據(jù)球員主頁(yè)的路徑,能夠獲取球員對(duì)應(yīng)的 playerID。
Player IDPlayerURL
2544LeBron Jameshttps://stats.nba.com/player/2544/
1629029Luka Doncichttps://stats.nba.com/player/1629029/
201935James Hardenhttps://stats.nba.com/player/201935/
202695Kawhi Leonardhttps://stats.nba.com/player/202695/
這樣,使用 playerID 作為參數(shù)修改上述的腳本文件,就能夠?qū)崿F(xiàn)我們的終極需求了。
const rp = require("request-promise-native");const fs = require("fs");// helper to delay execution by 300ms to 1100msasync function delay() {  const durationMs = Math.random() * 800 + 300;  return new Promise(resolve => {    setTimeout(() => resolve(), durationMs);  });}async function fetchPlayerYearOverYear(playerId) {  console.log(`Making API Request for ${playerId}...`);  // add the playerId to the URI and the Referer header  // NOTE: we could also have used the `qs` option for the  // query parameters.  const results = await rp({    uri: "https://stats.nba.com/stats/playerdashboardbyyearoveryear?DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&" +      `PlayerID=${playerId}` +      "&PlusMinus=N&Rank=N&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&Split=yoy&VsConference=&VsDivision=",    headers: {      "Connection": "keep-alive",      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",      "x-nba-stats-origin": "stats",      "Referer": `https://stats.nba.com/player/${playerId}/`    },    json: true  });  // save to disk with playerID as the file name  await fs.promises.writeFile(    `${playerId}.json`,    JSON.stringify(results, null, 2)  );}async function main() {  // PlayerIDs for LeBron, Harden, Kawhi, Luka  const playerIds = [2544, 201935, 202695, 1629029];  console.log("Starting script for players", playerIds);  // make an API request for each player  for (const playerId of playerIds) {    await fetchPlayerYearOverYear(playerId);    // be polite to our friendly data hosts and    // don't crash their servers    await delay();  }  console.log("Done!");}main();
我們提取了一個(gè)請(qǐng)求數(shù)據(jù)的公共函數(shù)?fetchPlayerYearOverYear,遍歷 ID 數(shù)組,并調(diào)用這個(gè)函數(shù)就能一次獲取需要的全部數(shù)據(jù)。另外,出于對(duì)服務(wù)器的保護(hù)以及道德操守,我們一般要設(shè)置延遲來(lái)避免造成服務(wù)器堵塞,影響其他用戶的訪問。通過(guò)上述步驟,我們就成功的使用 API 實(shí)現(xiàn)了數(shù)據(jù)自動(dòng)抓取。那如果是非前后端分離模式的 web 網(wǎng)頁(yè)應(yīng)用,沒有 API 接口,我們?cè)趺磳?shí)現(xiàn)自動(dòng)抓取呢?自動(dòng)抓取服務(wù)端渲染的 HTML 網(wǎng)頁(yè)數(shù)據(jù)非前后端分離模式的 web 應(yīng)用是將數(shù)據(jù)直接呈現(xiàn)在 HTML 頁(yè)面內(nèi),這種情況我們只要下載、解析 HTML 就能提取到我們的目標(biāo)數(shù)據(jù)。下面還是用案例來(lái)演示,目標(biāo)是從 espn.com 網(wǎng)站上爬取 NBA 比賽數(shù)據(jù)。1. 驗(yàn)證數(shù)據(jù)是否在?HTML?頁(yè)面內(nèi)和上一個(gè)案例相似,我們目標(biāo)是爬取籃球比賽得分?jǐn)?shù)據(jù),地址:?https://www.espn.com/nba/boxscore?gameId=401160888。

b616aafb80c248df6572dd99efa91bf3.webp

鼠標(biāo)右鍵單擊頁(yè)面-顯示網(wǎng)頁(yè)源代碼Ctrl+F 快捷鍵查找表格內(nèi)的數(shù)據(jù),比如?J.Embiid行的數(shù)字 0-11。

5dd1d8c3df55a4d372b07d36ab650c36.webp

ok,我們發(fā)現(xiàn)目標(biāo)數(shù)據(jù)存在 HTML 頁(yè)面內(nèi)。
2. 找到可以定位目標(biāo)數(shù)據(jù)的 CSS 元素選擇器我們需要用某些標(biāo)識(shí)來(lái)識(shí)別出HTML里目標(biāo)數(shù)據(jù),而 CSS 選擇器是一個(gè)非常好的標(biāo)識(shí)。鼠標(biāo)右鍵單擊頁(yè)面-檢查,調(diào)出開發(fā)人員工具。

edef29b45837db6738bece2d5e48510b.webp

通過(guò)開發(fā)人員工具我們能找到表格數(shù)據(jù)對(duì)應(yīng)的 HTML 元素,如下圖

694272fd56086b0616815176b705bc0f.webp

這時(shí)我們可以切換到 Console(控制臺(tái))選項(xiàng),使用?document.querySelectorAll()?函數(shù)來(lái)交互調(diào)試選擇器,直到我們找到正確的選擇器為止。比如,我們可以首先選擇表格的所有行(<tr>)
document.querySelectorAll('tr')
輸出:

ae2d2f9c66a4156c7b4df80bdccf8d96.webp

此時(shí),我們發(fā)現(xiàn)僅僅使用 tr 太過(guò)籠統(tǒng)了,它返回了41行數(shù)據(jù),而目標(biāo)表格只有13個(gè)行數(shù)據(jù)。我們可以通過(guò) tr 的父元素 ID 或者 classes 進(jìn)一步縮小返回的數(shù)據(jù)范圍。

ade1a7da37e4f09a0dfd17d13ebf5efa.webp

所以我們可以這樣寫選擇代碼
document.querySelectorAll('.gamepackage-away-wrap tbody tr')

dba80111ae24732dadf8dc81a83aa5b1.webp

這時(shí)我們發(fā)現(xiàn)已經(jīng)篩選出了15行表格數(shù)據(jù),離我們的目標(biāo)越來(lái)越近了,僅僅多了兩個(gè) tr.highlight,我們進(jìn)一步更新選擇器:
document.querySelectorAll('.gamepackage-away-wrap tbody tr:not(.highlight)')> NodeList(13) [tr, tr, tr, tr, tr, tr, tr, tr, tr, tr, tr, tr, tr]
ok,大功告成了!接下來(lái),我們要做的是使用Node.js 的 request 庫(kù)下載 HTML頁(yè)面,使用cheerio 庫(kù)解析HTML頁(yè)面并提取目標(biāo)數(shù)據(jù)。
3.?下載 HMTL 頁(yè)面和上個(gè)案例一樣,我們先按照 request 庫(kù),命令行窗口輸入:
npm init -ynpm install --save request request-promise-native
然后新建一個(gè) index.js 文件,輸入以下代碼
const rp = require('request-promise-native');const fs = require('fs');async function downloadBoxScoreHtml() {  // where to download the HTML from  const uri = 'https://www.espn.com/nba/boxscore?gameId=401160888';   // the output filename  const filename = 'boxscore.html';  // check if we already have the file const fileExists = fs.existsSync(filename); if (fileExists) {   console.log(`Skipping download for ${uri} since ${filename} already exists.`);   return; }  // download the HTML from the web server  console.log(`Downloading HTML from ${uri}...`);  const results = await rp({ uri: uri });  // save the HTML to disk  await fs.promises.writeFile(filename, results);}async function main() {  console.log('Starting...');  await downloadBoxScoreHtml();  console.log('Done!');}main();
運(yùn)行這個(gè)程序
node index.js
哇哦,你成功下載到 HTML文件了!
4. 使用 Cheerio 解析 HTMLCheerio 是從 HTML 頁(yè)面里提取數(shù)據(jù)的最佳工具庫(kù),跟 jQuery 非常類似。安裝 Cheerio
npm install --save cheerio
如何使用Cheerio?
第一步,使用?Cheerio.load 函數(shù)讀取 html文件內(nèi)容
// the input filenameconst htmlFilename = 'boxscore.html';// read the HTML from diskconst html = await fs.promises.readFile(htmlFilename);// parse the HTML with Cheerioconst $ = cheerio.load(html);
第二步,使用 css 選擇器提取數(shù)據(jù),跟?jQuery 語(yǔ)法一樣
const $trs = $('.gamepackage-away-wrap tbody tr:not(.highlight)')
這樣我們就得到了表格數(shù)據(jù)的所有 html 元素片段,如下:
<tr>  <td class="name">    <a name="&amp;lpos=nba:game:boxscore:playercard" href="https://www.espn.com/nba/player/_/id/6440/tobias-harris" data-player-uid="s:40~l:46~a:6440">      <span>T. Harris</span>      <span class="abbr">T. Harris</span>    </a>    <span class="position">SF</span>  </td>  <td class="min">38</td>  <td class="fg">7-17</td>  <td class="3pt">3-7</td>  <td class="ft">1-1</td>  <td class="oreb">0</td>  <td class="dreb">5</td>  <td class="reb">5</td>  <td class="ast">2</td>  <td class="stl">1</td>  <td class="blk">0</td>  <td class="to">2</td>  <td class="pf">3</td>  <td class="plusminus">-10</td>  <td class="pts">18</td></tr>...
進(jìn)一步使用選擇器遍歷我們提取到的 html 片段,就能得到目標(biāo)數(shù)據(jù)。
const values = $trs.toArray().map(tr => {  // find all children <td>  const tds = $(tr).find('td').toArray();  // create a player object based on the <td> values  const player = {};  for (td of tds) {    // parse the <td>    const $td = $(td);    // map the td class attr to its value    const key = $td.attr('class');    const value = $td.text();    player[key] = value;  }  return player;});
數(shù)據(jù)結(jié)果:
[  {    "name": "T. HarrisT. HarrisSF",    "min": "38",    "fg": "7-17",    "3pt": "3-7",    "ft": "1-1",    "oreb": "0",    "dreb": "5",    "reb": "5",    "ast": "2",    "stl": "1",    "blk": "0",    "to": "2",    "pf": "3",    "plusminus": "-10",    "pts": "18"  }  ...]
現(xiàn)在你學(xué)會(huì)了使用 cheerio 庫(kù)。接下來(lái)我們新建 index.js 文件,輸入以下代碼并運(yùn)行,即可獲取到我們的目標(biāo)數(shù)據(jù)。
const rp = require('request-promise-native');const fs = require('fs');const cheerio = require('cheerio');async function downloadBoxScoreHtml() {  // where to download the HTML from  const uri = 'https://www.espn.com/nba/boxscore?gameId=401160888';  // the output filename  const filename = 'boxscore.html';  // check if we already have the file  const fileExists = fs.existsSync(filename);  if (fileExists) {    console.log(`Skipping download for ${uri} since ${filename} already exists.`);    return;  }  // download the HTML from the web server  console.log(`Downloading HTML from ${uri}...`);  const results = await rp({ uri: uri });  // save the HTML to disk  await fs.promises.writeFile(filename, results);}async function parseBoxScore() {  console.log('Parsing box score HTML...');  // the input filename  const htmlFilename = 'boxscore.html';  // read the HTML from disk  const html = await fs.promises.readFile(htmlFilename);  // parse the HTML with Cheerio  const $ = cheerio.load(html);  // Get our rows  const $trs = $('.gamepackage-away-wrap tbody tr:not(.highlight)');  const values = $trs.toArray().map(tr => {    // find all children <td>    const tds = $(tr).find('td').toArray();    // create a player object based on the <td> values    const player = {};    for (td of tds) {      const $td = $(td);      // map the td class attr to its value      const key = $td.attr('class');      let value;      if (key === 'name') {        value = $td.find('a span:first-child').text();      } else {        value = $td.text();      }      player[key] = isNaN(+value) ? value : +value;    }    return player;  });  return values;}async function main() {  console.log('Starting...');  await downloadBoxScoreHtml();  const boxScore = await parseBoxScore();  // save the scraped results to disk  await fs.promises.writeFile(    'boxscore.json',    JSON.stringify(boxScore, null, 2)  );  console.log('Done!');}main();
小結(jié)總結(jié)一下,自動(dòng)抓取數(shù)據(jù)根據(jù) web 應(yīng)用開發(fā)模式的不同,分為兩種方法。前后端分離模式下,我們可以直接使用 API 自動(dòng)抓取數(shù)據(jù);而非前后端分離模式下,我們需要先下載 HTML 網(wǎng)頁(yè),再解析 HTML 并提取數(shù)據(jù)。你學(xué)會(huì)了嗎?參考網(wǎng)站:https://beshaimakes.com/js-scrape-data最后,如果覺得不錯(cuò),不要忘記你的三連,留下你的三連是對(duì)我的最大支持!

e95624c7a564feeaf685c67b86ad398d.webp


如果你喜歡,請(qǐng)點(diǎn)點(diǎn)關(guān)注啦~

以上


瀏覽 100
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 www.伊人大香蕉| 日韩人妻精品中文字幕专区不卡| 欧美熟妇另类久久久久久不卡| 久久电影无码| 丰满人妻一区二区三区| 免费操逼视频网站| 美女天天肏| 毛片黄色视频| 人人天天爽| PORNY九色视频9l自拍| 91丨人妻丨国产| 日本操逼在线播放| 亚洲人成在线观看| 色久在线| 99国产精品免费视频观看8| www.豆花视频成人版| 无码不卡中文字幕| 91密臀| 伊人操逼网| 国产亚洲精品成人a| 国内一级黄片| 日皮做爱视频网站| 国产无码激情视频| 丁香五月社区| 亚洲天堂男人的天堂| 亚洲无码中文字幕在线| 久操| 人妻熟女字幕一区二区| 伊人久久大香线蕉av一区| www.精品视频| 日韩V| 在线免费观看无码视频| 亚洲午夜久久久久久久久| 欧美成人国产| 中文色片| 蝌蚪窝免费在线视频| 亚洲乱码国产乱码精品天美传媒| 久久久久久久久久久久久自慰小片| 伊人网视频在线观看| 亚洲视频播放| 亚洲清高毛无码毛片| 国产一区二区成人久久919色| 最新无码在线| www.豆花视频成人版| 麻豆视频一区二区三区| 老司机午夜视频| 欧美老熟妇BBBBB搡BBB| 国产精品免费一区二区三区四区视频 | 亚洲免费在线观看视频| 91香蕉国产| 天美精东蜜桃91| 尤物在线| 黄片免费视频观看| 国产一区二区三区四区五区在线| 久操视频免费在线观看| 玖玖激情| 黄片高清视频| 特一级黄片| 欧美偷拍一区| 男女一区二区| 国产精品人人| 日韩AA片| 日韩高清无码免费观看| 欧美日韩一级二级三级| 欧美韩日一区二区| 婷婷成人在线| 欧美精品黄| 天天日天天噜| av黄色网址| 另类老妇奶性生BBwBBw偷拍| 8x8拨牐拨牐拨牐永久免费| 夜夜夜操操操| 起碰在线视频| 亚洲天堂在线观看视频网站| 伊人久久大香蕉视频| 成人黄片在线免费观看| 亚洲日韩一区二区三区| 免费在线国产| 3D动漫精品啪啪一区二区| 五月花在线视频| 九九九热精品| 3d动漫一区二区| 亚洲成人在线视频观看| 日本色情视频网站| 国产黄色一区| 国产精品一区二区AV日韩在线 | 五月天亚洲激情| 亚洲乱码国产乱码精品天美传媒| 成人二区三区| 亚洲国产A片| 日韩中文字幕永久| 亚洲经典免费视频| 天天日天天噜| 9久久精品| 日韩熟妇无码| 91熟女乱伦| 成人做爰黄A片免费视频网站野外 国产成人午夜精品无码区久久麻豆 | 国产精品免费人成网站酒店| 最近中文字幕av| 亚洲人妖在线| 中文字幕一本道| 欧美一区免费| 国产Av影视| 2019国产精品| 国产三级片在线观看视频| 影音先锋色先锋| 欧美XXX视频| 国产又爽又黄在线看视频| 日韩精品成人无码免费| 嫩草AV| 高清无码免费观看| 黑人毛片| 69久久久| 日韩无码字幕| 国产精品视频免费在线观看| 日韩精品毛片| 激情综合在线| 色五月激情网| 天天摸天天日| av网站免费观看| 成人午夜毛片| 青青草97国产精品麻豆| 日韩人妻精品中文字幕| 中文字幕无码视频| 亚洲精品国产成人无码区在线 | 婷婷五月天无码| 97人妻无码一区二区| 久久9热| 91爱搞搞| 色婷操逼| 日本欧美成人片AAAA| 高潮无码在线观看| 在线视频一区二区| 91大香蕉视频| 国产AV一二三区| 亚洲性爱网址| 日韩成人中文字幕| 黄色视频| 亚洲AV无码一区二区三区少妇 | 综合操逼网| 国产99久久九九精品无码免费| 亚洲无码AV在线播放| h片免费观看| 午夜18视频在线观看| 牛牛av| 草视频在线| 久操B网| 开心黄色网| 伊香蕉大综综综合| 亚洲无套内射| 特级毛片片A片AAAAAA| 亚洲欧美人妻| 亚洲色图狠狠撸| 日韩性爱视频在线播放| 黄色大片网址| 真人BBwBBWBBw另类视频| 青娱乐成人在线| 欧美黄色三级片| 一个色综合网| 亚洲成人视频在线观看| 一级a片在线| 中文免费高清在线| 日韩精品一区在线| 亚洲美女一区| 亚洲精品福利视频| 国产三级片网站| 人妻公日日澡久久久| 午夜成人无码视频| 黄色内射视频| 色老板亚洲| 亚洲中文字幕在线免费观看视频| 99re在线视频| 欧美A级黄片| 九九九网站| 污污污污污www网站免费观看| 人妻丰满熟妇av无码区| 久久久天堂| 国产欧美一区二区三区视频| 91精品国产综合久久久蜜臀粉嫩| 青娱乐偷窥成| 青青草在线观看免费| 激情综合在线| 簧片网站在线观看| 中文字幕在线日韩| 人人做人人爽| 小黄片免费看| 欧美大香蕉伊人| 欧美一级免费观看| 国产乱妇乱子伦视频免费观看| 日本一区二区三区免费看| 欧美va亚洲va| 亚洲黄色电影网| 日逼网站免费观看| av麻豆| 亚洲人妻免费视频| 亚洲天堂无| 亚洲人天堂| 国产黄页| 色妞视频精品一区| 日韩无码黄色视频| 香蕉伊人视频| 日本A在线| 黄色日逼视频| 澳门午夜黄色在线| 色色五月天网站| 国产精品成人影视| 欧美激情一区| 亚洲国产精品18久久久久久| 欧美在线| 激情久久婷婷| 国产视频久久| 人人操人人网站| 国产成人自拍视频在线观看| 中文字幕乱码中文字乱码影响大吗 | 成人无码免费视频| 大香伊人中文字幕精品| 另类老妇奶性生BBwBB| 小小拗女BBw搡BBBB搡| 狠狠干综合网| 国产在线中文字幕| 成人国产精品秘在线看| 干B网| 2025AV在线| 热久久久| 97热| 精品无码视频在线| 丰滿人妻一区二区三区| 专业操美女视频网站| 高清无码网站在线观看| 内射免费网站| 西西888WWW大胆无码| 天干夜操| 特级西西人体444www高清| AV中文字幕网| 成年人在线观看| 91香蕉在线看| 亚洲a√| 自拍偷拍亚洲| 欧美九九九九| 黄色天堂| 肏屄在线视频| 国产精品色婷婷99久久精品| 波多野59部无码喷潮| 欧美日韩免费一区二区三区| 国产一区二区三区18| 特级西西444www大胆高清图片 | 欧洲无码一区二区三区| 国产精品污www在线观看| 波多野结衣AV在线播放| 大地8免费高清视频观看大全| 激情操逼视频| 91夫妻视频| 色就是欧美| 国产综合区| 在线无码av| 国产熟女一区二区久久| 日本黄色视频大全| 欧美级毛片一夜| 成人视频三级| 天堂网av2014| 中文不卡视频| 仙踪林777777野大粗| 超碰成人在线免费观看| 国产在线视频你懂的| 欧美亚洲系列| 日韩A片在线| 18禁一区二区三区| 国产日韩a| 丁香六月啪啪| 久久国产无码| 黄色小说在线播放| 深夜福利18| 日本欧美久久久久免费播放网| 99re这里只有精品6| av在线资源网| 天天撸天天干天天日| 色鬼综合网| 成人在线中文字幕| 婷婷五月免费视频| 国产一级婬乱片AV片AAA毛片| 国产综合久久| 少妇一级婬片内射视频| 蜜桃视频网站18| AV影院在线| 日韩图色| 人妻人人爱| 探花在线| 乱子伦国产精品视频| 国产男女性爱视频播放| 久久天天拍| 97人人插| 性爱AV网| 国产精品乱子伦视频一区二区| 91欧美黑人| 波多野结衣av在线观看| 中文字幕亞洲高清手機版第617| 小黄片在线免费观看| 波多野结衣亚洲视频| 99热综合| 亚洲精品自拍偷拍| 91AV在线看| 欧美操大逼| 久久久久久久久久8888| 国产免费一区二区三区网站免费| 波多野结衣大战黑人| 一级免费黄色电影| 精品日韩AV| 撸一撸在线| 99热6| 簧片在线免费观看| 黄色内射在线播放| 国产五月天婷婷| 欧美黄色影院| 中文字幕日韩有码| 人人色人人干| 国产免费黄色视频网站| 91国语对白| 欧美成人看片| 国产一片黑夜内射| 91精品综合久久久久久五月丁香| 欧美在线| 日本免费爱爱视频| 成人影视在线免费观看| 国产精品成人免费精品自在线观看 | 操嫩逼视频| 国产a视频| 成人影视在线免费观看| 91国产爽黄| 91亚洲一区| 无码人妻精品一区二区三| 北条麻妃二区三区| 日韩黄色电影网址| 98无码人妻精品一区二区三区| 天天色天天色天天色| 黄色视频在线免费观看高清视频| 大香蕉免费在线观看| 欧美亚洲天堂| 欧美888| 一区精品| 中文字幕超清在线观看| 中文字幕乱妇无码Av在线| 草草影院第一页YYCCC| 日韩一级黄色| 美女网站永久免费观看| 日韩欧美亚洲| 中文字幕精品三区无码| 激情综合婷婷| 成人一级黄色电影| 色色9999| 在线观看中文字幕网站| 99在线观看免费视频| 99久久成人| 国产人妖在线观看| 免费观看在线黄片| 黄片大全在线观看| 精品一区二区免费| 天堂中文字幕在线观看| 亚洲AV成人电影| 国产毛片在线| 国产女人18毛片水真多成人如厕| 91成人在线观看国产| 日韩精品一区在线| 成人福利视频| 亚洲中文字幕免费在线观看| 亚洲无码一级电影| 天堂AV在线免费观看| 日本一区二区三区免费看| 一区成人| 夜夜网站| 2018天天干天天操| 亚洲经典一| 久久久久91| 免费看黄色的网站| 欧美性爱中文字幕| 国产酒店自拍| 国产精品a久久久久| 日本精品乱伦| 成人动漫在线观看| 日韩性爱一区二区| 五月婷婷无码| 青青草91| 色吧超碰| 成人超碰在线| 一本大道东京热AV| 91中文字幕+乱码| 在线观看免费高清无码| 国产精品偷拍| 国产欧美一区二区三区特黄手机版 | 国产黄色片视频| 天堂资源地址在线| 成人电影一区二区| 亚洲无码伊人| 92无码| 日韩中文性受视频| 91人人操人人| 成人视频三级| 熟睡侵犯の奶水授乳在线| 69午夜| 人人爽爽| 91成人在线观看学生和老师| 尤物91| 18禁裸体美女| 免费v片在线观看| 九九成人精品| 亚洲成人免费视频| 狠狠干在线观看| 亚洲不卡免费视频| 日本A在线| 99久久丫e6| 91综合在线| 成人片免费看| 亚洲无码一卡| 欧美成人a| 欧美操逼在线观看| 成人小视频观看| 福利色播| 制服.丝袜.亚洲.中文.豆花 | 中文AV在线播放| 天天天日天天天天天天天日歌词| 四川妇BBB桑BBB桑BBB| 北条麻妃人妻中文字幕91影视 | 丁香五月婷婷综合网| 爱看福利视频| 一区视频免费观看| 亚洲中文字幕av天堂| 国产在线拍偷自揄拍无码一区二区| 欧美va亚洲va| yw在线观看| 韩国中文无码| 国产1区在线观看| 中文字幕久久无码| 亚洲无码性爱视频| 色欲成人AV| 久久美女视频| 人人看人人摸人人草| 五月天久久久久久| 少妇嫩搡BBBB搡BBBB| 日韩三级在线播放| 在线观看高清无码中文字幕| 午夜视频在线播放| 丁香婷婷综合网| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 先锋久久资源| 久久综合中文字幕| 一本到在线视频| 99在线精品视频在线观看| 黄片aaa| 中文字幕在线观看二区| 亚洲视频网址| 天堂中文在线视频| 国产成人AV在线观看| 精品AV国产| 三级国产| 亚洲女人视频| 国产高清无码网站| 精品在线播放| 无码99| 国产最新福利| 婷婷色综合视频二区| 好吊妞在线| 北条麻妃AV观看| 国产激情免费| 东京热视频一区| 影音先锋久久久| 中国少妇xxx| 成人视频在线播放| 人人爽久久涩噜噜噜网站| 特级爱爱视频| 黄色无码视频| 97精品国产97久久久久久免费| 国产九九热| 久久人搡人人玩人妻精AV香蕉| www中文字幕| 俺去俺来也在线www色情网| 欧美区在线观看| 特级西西人体大胆无码| 超碰操| 亚洲Av无码午夜国产精品色软件 | 国产精品的电影| 日韩成人黄色电影| 天天干天天天天| 国产精品秘精东影业| 欧美综合国产| 强伦轩人妻一区二区三区四区| 狠狠色狠狠撸| 姐弟乱伦性爱| 大色网小色网| 蜜桃性爱视频| 老熟女网站| 国产日韩欧美| 免费一级黄| 青在线视频| 亚洲无码免费在线视频| 日韩一级在线| 成人网站一区| 大香蕉AV在线观看| 一区二区三区四区在线视频| 天天干天天日天天操| 精品一区二区三区免费毛片| 可以免费看的黄色| 中文字幕AV免费观看| 日韩无码三级片| 国产最新视频| 久热精品在线观看视频| 久久精品99国产国产精| 三洞齐开Av在线免费观看| 精东影业秘国产传媒| 久久一区二区三区四区五区| 日本熟妇在线| 一本色道88久久加勒比精品| 无码免费在线视频| 国产精品911| 91天天看| 欧美成人精品一级| 国产三级电影| 国产A视频| 日本一级大片| 探花一区二区| 五月天婷婷色播| 人人爽人人爽| 午夜无码在线| 91丨牛牛丨国产| 欧美不卡一区二区| 欧美色图亚洲另类| 色婷婷av| 一级A片60分钟免费看| 亚洲黄色视频在线| 粉嫩av一区二区白浆| 久久日韩无码| 日本大胆中出| 无码人妻一区二区一牛影视| 深夜福利18| 99精品视频16在线免费观看| 无码在线播放视频| 日韩精品你懂的| 五月丁香五月婷婷| 美日韩中文字幕| 中文字幕丰满熟妇人妻| 污视频网站免费在线观看| 免费日本A片| 69天堂| 一道本无吗一区| 囯产精品久久久久久久| 婷婷午夜精品久久久久久| 日本中文无码| 伊人五月婷婷| 激情丁香五月| 日韩AV小说| 国产精品欧美一区二区三区苍井空| 五月天一区二区三区| 蜜臀久久99精品久久久久久宅男| 久久99精品久久久久婷婷| av麻豆| 91精品丝袜久久久久久久久久粉嫩 | 99久久久国产| 操逼视频高清无码| 亚洲狼人久久久精品| 黄色免费a级片一级片| 国产色情性黄片Av网站| 韩日一区二区| 91ThePorn国产在线观看| 日韩激情一区| 91久久无码一区人妻A片蜜桃| 天天操夜夜操视频免费高清| 国产精品无毛五区六区| 日本免费一级片| 成人亚洲AV日韩AV无码| 99视频精品全部免费看| 特黄AAAAAAAA片免费直播| 91人人妻人人爽| 刘玥精品A片在线观看| 国产AV无码区亚洲| 91视频网址| 日韩欧美在线免费观看| 成人国产精品在线看| 91精品在线免费观看| 色婷婷五月天激情| 精品素人在线| 996精品在线| www,操逼| 青青操逼| 91九色蝌蚪| 九九国产精品| 成人做爰黄AA片免费看三区 | 天天夜夜操操| 制服丝袜在线视频| 成人毛片一区二区三区无码| 国产亚洲综合无码| 国产粉嫩小泬白浆18p| 日韩www| 久久精品6| 人人妻人人爽人人操| 中文字幕日韩视频| 亚洲精品中文字幕在线观看| 无码秘蜜桃吴梦梦| 北条麻妃在线一区二区| 欧美18成人| 欧美精品三区| 120分钟婬片免费看| 青草成人在线视频| 三洞齐开Av在线免费观看| 九九热九九| 日韩AV无码电影| 国产中文字幕在线视频| 久久666| 中文三区| 丁香五月婷婷五月天| 亚洲第九页| 无码人妻一区二区三区在线视频不卡| 黄色一级大片在线免费看国产| 夜夜操天天| 国产青草视频在线观看| 欧美在线观看视频一区| 国产精品久久久久久久免牛肉蒲| 超碰在线免费| 日本人妻A片成人免费看片| 国产精品久久久久毛片SUV| 欧美香蕉| 成人午夜激情| 午夜A区| 中文字幕视频网站| 国内成人AV| 国产又大又黄| 亚洲成人AV无码| 国内精品一区二区三区| 四虎麻豆| 欧美日韩亚洲天堂| 婷婷丁香色五月| 永久m3u8在线观看| 资源av| 国产黄色片在线播放| 无码专区在线播放| 国产欧美另类| 黄色视频大全免费看| 久久久久久久久久久久成人 | 91成人综合| 久久久女女女女999久久| 国产91一区在线精品| 被男友内S~高H文| 午夜做爱福利视频| 朝鲜性感AV在线| 日韩精品欧美一区二区三区| 久久v| 三级久久| 伊人成人网站| 躁BBB躁BBB躁BBBBBB日| 国产日逼视频| 另类老妇奶性BBWBBw| 91成人在线| 人人色人人操| 俺来也操逼| 欧美国产日韩综合在线观看170 | 北京熟妇槡BBBB槡BBBB| 色婷婷在线视频观看| 国产二区三区| 成人AA片| 日韩啪啪视频| av中文字幕在线播放| 91精品视频在线播放| 亚洲成人在线网站| 欧美黄色免费看| 亚洲无码视频播放| 亚洲人妻中文字幕| 国产综合久久| 丁香五月激情综合| 91成人视频| 亚洲一区二区三区在线++中国| youjizzcom日本| 日韩图片区小说视频区日| 欧美不卡在线视频| 亚洲欧美日韩无码| 欧美操日本| 大香蕉玖玖| 亚洲综合网在线观看| 人人操人人爱人人妻| 秋霞理伦| 亚洲另类图片小说| 欧美日韩亚洲成人| 亚洲精品视频免费观看| 高清无码免费看| 60分钟上大床又黄又爽| 久久久久久久久国产精品| 呦小BBBB小小BBBB| 黄色小视频在线免费观看| 在线看黄色片| 在线日韩视频| 在线观看黄| 亚洲免费在线| 亚洲三级网站在线观看| 操操操操一本到| 起碰在线视频| av无码不卡| 91在线成人电影| 久久探花| 不卡的一区二区| 青娱乐最新官网| 亚洲欧洲精品在线| 91精品国产综合久久久蜜臀九色| 成人在线一区二区| 亚洲天堂在线免费观看| 中文字幕免费在线观看| 欧美色伊人| 丁香五月一区二区| 日韩无码波多野结衣| 国精品无码A区一区二区| 日韩精品无码AV| 久久AV网站| 亚洲日韩精品在线观看| 国产精品日韩无码| www.17c嫩嫩草色蜜桃网站| 四川少扫搡BBw搡BBBB| 亚洲国产91| 最近日韩中文字幕中文翻译歌词| 日韩一级一级一级| 成人尤物网站| av无码不卡| 91AV在线免费观看| 国产精品成人免费视频| 牛牛精品视频| 自拍偷拍成人视频| 日韩无码中文字幕| 日韩a| 日韩AV三级片| 亚洲无码A区| 黄色AV免费观看| 色欲AV网站| 逼逼网| 亚洲日本视频| 日本三级网| 成人喷水亚洲一区无码| 欧美国产成人在线| 无码天天| 国产亚洲无码激情前后夹击| 69人妻人人澡人人爽久久| 五月天亚洲色图| 91网站免费| 91拍真实国产伦偷精品| 中文字幕在线看| 国产喷潮| 成人久久久久久| 色婷婷18正码国产| 国产三级小视频| 天堂综合| 99久久久久| 乱码中文字幕日韩欧美在线| 性满足BBwBBWBBw| 色欲AV秘无码一区二区三区| 国产丝袜自拍| www尤物| 人妻无码一区二区三区摄像头| av高清无码| 久久99精品久久久久婷婷| 91香蕉视频在线看| 国产熟睡乱子伦午夜视频_第1集 | 色老板在线精品免费观看| 影音先锋三区| 免费国产黄色视频| 夜色福利在线| 黄片AAA| 欧美日日| 色五月视频在线| 亚洲AV无码乱码国产精品黑人| anwuye官方网站| 国产黄色精品视频| 91在线无码精品秘国产色多多 | 国产乱码精品一品二品| 免费av片| 丁香花小说完整视频免费观看| 亚洲AV无码成人精品| 国产美女一级特黄大片| 先锋资源日韩| 久久久精品欧美| 人妻二区| 逼特逼在线观看| 91人妻人人澡人人爽人人精吕 | 国产一级在线免费观看| 国产一区二区视频在线| 60分钟上大床又黄又爽| 1级毛片| 熟女视频国产| 水果派解说AV无码一区| 日本69视频| 69成人免费视频| 91av在线看| 免费看一级高潮毛片| 97免费视频在线观看| 免费二区| 在线免费观看毛片| 黄色激情网站| 一级a一级a爰片免费免免在线| 日逼黄色视频| 国产精品主播| 神马午夜福利视频| 99精品视频北条麻妃国产版| 91国内产香蕉| 亚洲中文字幕在线视频观看| AV无码免费观看| 国产亚洲视频完整在线观看| 夜色精品视频| 三级网站视频| 26∪u∪成人网站| 国产av一区二区三区| 亚洲中文字幕免费观看视频| 男女乱伦视频| 亚洲高清无码在线播放| 综合伊人| 日韩成人无码特集| 一级免费黄色视频| 日批免费网站| 人人操人人色| 午夜无码久久| 男人天堂婷婷| 青青草精品视频| 国产探花视频在线免费观看| 梁祝艳谭A级毛片| 色综合欧美| 国产毛片在线看| 懂色成人视频在线观看| 欧美成人免费观看| 日本熟妇高潮BBwBBwBBw| 激情小说区| 国产乱伦片、| 大香蕉com| 91亚洲欧美| 国产精品国产伦子伦露看| 亚洲免费观看A∨中文| 亚洲无码性爱视频| 在线永久看片免费的视频| 亚洲精品欧美久久婷婷| 二区视频在线| 9l视频自拍蝌蚪9l成人蝌蚪| 在线免费无码| 爱爱免费视频| 影音先锋成人在线资源| 亚洲xxxxx| 一纹A片免费观看| 亚洲黄色在线免费观看| 99成人免费视频| 波多野结衣成人视频| 五月亭亭在线视频| 午夜福利播放| 国产黄页| 亚洲乱码一区| 人人搞人人操| 丁香九月婷婷| 大香蕉一级红色片青青河边草| 欧美深夜福利视频| 日本毛片视频| 亚洲成人黄色电影| www.91在线视频| 午夜操逼网| 色综合99| 日韩无码波多野结衣| 谁有毛片网站| 中文字幕无码在线播放| 91一区二区在线观看| 亚洲中文幕| 亚洲视频播放| 黄色电影天堂网站| 永久久久久久久| 成人做爰黄A片免费看直播室动漫| 免费的黄色A片| 国产久久久久久久久| 91色噜噜狠狠色婷婷| 亚洲男女av| 高清中文字幕在线A片| 久久综合五月| 亚洲AV无码一区二区三区少妇| 亚洲日韩欧美一厂二区入| 婷婷伊人綜合中文字幕| 五月天超碰| 国产三级片无码| 777久久| 一级黄色av| 欧美人妻中文字幕| 久久精品熟妇丰满人妻99| 日韩在线大香蕉| 91男女| 操操操操操操| 91大神在线免费观看| 日韩a级毛片| 欧美大片视频| 成人无码激情| 人妻无码在线视频| 男人的天堂av网站| 91爱在线| 91视频一区二区| 蜜桃人妻| 97黄片| 亚洲欧洲久久电影| 日本69AV| 国产青青| 欧美黄片在线免费看| 搡女人视频国产一级午夜片| 福利一区二区| 免费视频亚洲| 欧美色色色色色色| 日韩va亚洲va欧美va高清| 人人干97| 国产人妻在线|