精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

爬蟲解析提取數據的四種方法

開發 后端
本文分別利用正則表達式、BeautifulSoup、PyQuery、Xpath來解析提取數據,并將豆瓣電影 Top250 信息保存到本地。

 一、分析網頁

以經典的爬取豆瓣電影 Top250 信息為例。每條電影信息在 ol class 為 grid_view 下的 li 標簽里,獲取到所有 li 標簽的內容,然后遍歷,就可以從中提取出每一條電影的信息。

翻頁查看url變化規律: 

  1. 第1頁:https://movie.douban.com/top250?start=0&filter 
  2. 第2頁:https://movie.douban.com/top250?start=25&filter 
  3. 第3頁:https://movie.douban.com/top250?start=50&filter 
  4. 第10頁:https://movie.douban.com/top250?start=225&filter

start參數控制翻頁,start = 25  * (page - 1)

本文分別利用正則表達式、BeautifulSoup、PyQuery、Xpath來解析提取數據,并將豆瓣電影 Top250 信息保存到本地。

二、正則表達式

正則表達式是一個特殊的字符序列,它能幫助你方便地檢查一個字符串是否與某種模式匹配,常用于數據清洗,也可以順便用于爬蟲,從網頁源代碼文本中匹配出我們想要的數據。

re.findall

  •  在字符串中找到正則表達式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。
  •  注意:match和 search 是匹配一次;而 findall 匹配所有。
  •  語法格式為:findall(string[, pos[, endpos]])
  •  string : 待匹配的字符串;pos : 可選參數,指定字符串的起始位置,默認為 0;endpos : 可選參數,指定字符串的結束位置,默認為字符串的長度。

示例如下: 

  1. import re  
  2. text = "" 
  3. <div class="box picblock col3" style="width:186px;height:264px">  
  4. <img src2="http://pic2.sc.chinaz.com/Files/pic/pic9/202007/apic26584_s.jpg" 123nfsjgnalt="山水風景攝影圖片">  
  5. <a target="_blank" href="http://sc.chinaz.com/tupian/200509002684.htm"  
  6. <img src2="http://pic2.sc.chinaz.com/Files/pic/pic9/202007/apic26518_s.jpg" enrberonbialt="山脈湖泊山水風景圖片">  
  7. <a target="_blank" href="http://sc.chinaz.com/tupian/200509002684.htm"  
  8. <img src2="http://pic2.sc.chinaz.com/Files/pic/pic9/202006/apic26029_s.jpg" woenigoigniefnirneialt="旅游景點山水風景圖片">  
  9. <a target="_blank" href="http://sc.chinaz.com/tupian/200509002684.htm"  
  10. """  
  11. pattern = re.compile(r'\d+')  # 查找所有數字  
  12. result1 = pattern.findall('me 123 rich 456 money 1000000000000')  
  13. print(result1) 
  14. img_info = re.findall('<img src2="(.*?)" .*alt="(.*?)">', text)  # 匹配src2 alt里的內容  
  15. for src, alt in img_info:  
  16.     print(src, alt)  
  17. ['123', '456', '1000000000000']  
  18. http://pic2.sc.chinaz.com/Files/pic/pic9/202007/apic26584_s.jpg 山水風景攝影圖片  
  19. http://pic2.sc.chinaz.com/Files/pic/pic9/202007/apic26518_s.jpg 山脈湖泊山水風景圖片  
  20. http://pic2.sc.chinaz.com/Files/pic/pic9/202006/apic26029_s.jpg 旅游景點山水風景圖片 

代碼如下: 

  1. # -*- coding: UTF-8 -*-  
  2. """  
  3. @Author  :葉庭云  
  4. @公眾號  :修煉Python  
  5. @CSDN    :https://yetingyun.blog.csdn.net/  
  6. """  
  7. import requests  
  8. import re  
  9. from pandas import DataFrame 
  10. from fake_useragent import UserAgent  
  11. import logging  
  12. # 日志輸出的基本配置  
  13. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s' 
  14. # 隨機產生請求頭  
  15. ua = UserAgent(verify_ssl=Falsepath='fake_useragent.json' 
  16. def random_ua():  
  17.     headers = {  
  18.         "Accept-Encoding": "gzip",  
  19.         "Connection": "keep-alive",  
  20.         "User-Agent": ua.random  
  21.     }  
  22.     return headers  
  23. def scrape_html(url):  
  24.     resp = requests.get(url, headers=random_ua())  
  25.     # print(resp.status_code, type(resp.status_code))  
  26.     if resp.status_code == 200:  
  27.         return resp.text 
  28.      else:  
  29.         logging.info('請求網頁失敗')  
  30. def get_data(page):  
  31.     url = f"https://movie.douban.com/top250?start={25 * page}&filter="  
  32.     html_text = scrape_html(url)  
  33.     # 電影名稱  導演 主演  
  34.     name = re.findall('<img width="100" alt="(.*?)" src=".*"', html_text)  
  35.     director_actor = re.findall('(.*?)<br>', html_text)  
  36.     director_actor = [item.strip() for item in director_actor]  
  37.     # 上映時間  上映地區  電影類型信息   去除兩端多余空格  
  38.     info = re.findall('(.*)&nbsp;/&nbsp;(.*)&nbsp;/&nbsp;(.*)', html_text)  
  39.     time_ = [x[0].strip() for x in info]  
  40.     area = [x[1].strip() for x in info]  
  41.     genres = [x[2].strip() for x in info]  
  42.     # 評分  評分人數  
  43.     rating_score = re.findall('<span class="rating_num" property="v:average">(.*)</span>', html_text)  
  44.     rating_num = re.findall('<span>(.*?)人評價</span>', html_text)  
  45.     # 一句話引言  
  46.     quote = re.findall('<span class="inq">(.*)</span>', html_text)  
  47.     data = {'電影名': name, '導演和主演': director_actor,  
  48.             '上映時間': time_, '上映地區': area, '電影類型': genres,  
  49.             '評分': rating_score, '評價人數': rating_num, '引言': quote} 
  50.      df = DataFrame(data)  
  51.     if page == 0:  
  52.         df.to_csv('movie_data2.csv', mode='a+'header=Trueindex=False 
  53.     else:  
  54.         df.to_csv('movie_data2.csv', mode='a+'header=Falseindex=False 
  55.     logging.info(f'已爬取第{page + 1}頁數據')  
  56. if __name__ == '__main__':  
  57.     for i in range(10):  
  58.         get_data(i) 

三、BeautifulSoup

find( )與 find_all( ) 是 BeautifulSoup 對象的兩個方法,它們可以匹配 html 的標簽和屬性,把 BeautifulSoup 對象里符合要求的數據都提取出來:

  •  find( )只提取首個滿足要求的數據
  •  find_all( )提取出的是所有滿足要求的數據
  •  find( ) 或 find_all( ) 括號中的參數:標簽和屬性可以任選其一,也可以兩個一起使用,這取決于我們要在網頁中提取的內容。括號里的class_,這里有一個下劃線,是為了和 python 語法中的類 class 區分,避免程序沖突。當然,除了用 class 屬性去匹配,還可以使用其它屬性,比如 style 屬性等;只用其中一個參數就可以準確定位的話,就只用一個參數檢索。如果需要標簽和屬性同時滿足的情況下才能準確定位到我們想找的內容,那就兩個參數一起使用。

代碼如下: 

  1. # -*- coding: UTF-8 -*-  
  2. """  
  3. @Author  :葉庭云  
  4. @公眾號  :修煉Python  
  5. @CSDN    :https://yetingyun.blog.csdn.net/  
  6. """  
  7. import requests  
  8. from bs4 import BeautifulSoup  
  9. import openpyxl  
  10. from fake_useragent import UserAgent  
  11. import logging  
  12. # 日志輸出的基本配置  
  13. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s' 
  14. # 隨機產生請求頭  
  15. ua = UserAgent(verify_ssl=Falsepath='fake_useragent.json' 
  16. wb = openpyxl.Workbook()    # 創建工作簿對象  
  17. sheet = wb.active           # 獲取工作簿的活動表  
  18. sheet.title = "movie"       # 工作簿重命名  
  19. sheet.append(["排名", "電影名", "導演和主演", "上映時間", "上映地區", "電影類型", "評分", "評價人數", "引言"])  
  20. def random_ua():  
  21.     headers = {  
  22.         "Accept-Encoding": "gzip",  
  23.         "Connection": "keep-alive",  
  24.         "User-Agent": ua.random  
  25.     }  
  26.     return headers  
  27. def scrape_html(url):  
  28.     resp = requests.get(url, headers=random_ua())  
  29.     # print(resp.status_code, type(resp.status_code))  
  30.     if resp.status_code == 200:  
  31.         return resp.text  
  32.     else: 
  33.          logging.info('請求網頁失敗')  
  34. def get_data(page):  
  35.     global rank  
  36.     url = f"https://movie.douban.com/top250?start={25 * page}&filter="  
  37.     html_text = scrape_html(url)  
  38.     soup = BeautifulSoup(html_text, 'html.parser')  
  39.     lis = soup.find_all('div', class_='item' 
  40.     for li in lis:  
  41.         name = li.find('div', class_='hd').a.span.text  
  42.         temp = li.find('div', class_='bd').p.text.strip().split('\n')  
  43.         director_actor = temp[0]  
  44.         temptemp1 = temp[1].rsplit('/', 2)  
  45.         time_, area, genres = [item.strip() for item in temp1]  
  46.         quote = li.find('p', class_='quote' 
  47.         # 有些電影信息沒有一句話引言  
  48.         if quote:  
  49.             quotequote = quote.span.text  
  50.         else:  
  51.             quote = None  
  52.         rating_score = li.find('span', class_='rating_num').text  
  53.         rating_num = li.find('div', class_='star').find_all('span')[-1].text  
  54.         sheet.append([rank, name, director_actor, time_, area, genres, rating_score, rating_num, quote])  
  55.         logging.info([rank, name, director_actor, time_, area, genres, rating_score, rating_num, quote])  
  56.         rank += 1 
  57. if __name__ == '__main__':  
  58.     rank = 1  
  59.     for i in range(10):  
  60.         get_data(i)  
  61.     wb.save(filename='movie_info4.xlsx'

四、PyQuery

  •  每個網頁,都有一定的特殊結構和層級關系,并且很多節點都有 id 或 class 作為區分,我們可以借助它們的結構和屬性來提取信息。
  •  強大的 HTML 解析庫:pyquery,利用它,我們可以直接解析 DOM 節點的結構,并通過 DOM 節點的一些屬性快速進行內容提取。

如下示例:在解析 HTML 文本的時候,首先需要將其初始化為一個 pyquery 對象。它的初始化方式有多種,比如直接傳入字符串、傳入 URL、傳入文件名等等。 

  1. from pyquery import PyQuery as pq  
  2. html = '' 
  3. <div>  
  4.     <ul class="clearfix">  
  5.         <li class="item-0">first item</li>  
  6.         <li class="item-1"><a href="link2.html">second item</a></li>  
  7.         <li><img src="http://pic.netbian.com/uploads/allimg/210107/215736-1610027856f6ef.jpg"></li>  
  8.         <li><img src="http://pic.netbian.com//uploads/allimg/190902/152344-1567409024af8c.jpg"></li>   
  9.     </ul>  
  10. </div>  
  11. '''  
  12. doc = pq(html)  
  13. print(doc('li')) 

結果如下: 

  1. <li class="item-0">first item</li>  
  2. <li class="item-1"><a href="link2.html">second item</a></li>  
  3. <li><img src="http://pic.netbian.com/uploads/allimg/210107/215736-1610027856f6ef.jpg"/></li>  
  4. <li><img src="http://pic.netbian.com//uploads/allimg/190902/152344-1567409024af8c.jpg"/></li>   

首先引入 pyquery 這個對象,取別名為 pq,然后定義了一個長 HTML 字符串,并將其當作參數傳遞給 pyquery 類,這樣就成功完成了初始化。接下來,將初始化的對象傳入 CSS 選擇器。在這個實例中,我們傳入 li 節點,這樣就可以選擇所有的 li 節點。

代碼如下: 

  1. # -*- coding: UTF-8 -*-  
  2. """  
  3. @Author  :葉庭云  
  4. @公眾號  :修煉Python  
  5. @CSDN    :https://yetingyun.blog.csdn.net/  
  6. """  
  7. import requests  
  8. from pyquery import PyQuery as pq  
  9. import openpyxl  
  10. from fake_useragent import UserAgent  
  11. import logging  
  12. # 日志輸出的基本配置  
  13. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s' 
  14. # 隨機產生請求頭  
  15. ua = UserAgent(verify_ssl=Falsepath='fake_useragent.json' 
  16. wb = openpyxl.Workbook()    # 創建工作簿對象  
  17. sheet = wb.active           # 獲取工作簿的活動表  
  18. sheet.title = "movie"       # 工作簿重命名  
  19. sheet.append(["排名", "電影名", "導演和主演", "上映時間", "上映地區", "電影類型", "評分", "評價人數", "引言"])  
  20. def random_ua():  
  21.     headers = {  
  22.         "Accept-Encoding": "gzip",  
  23.         "Connection": "keep-alive",  
  24.         "User-Agent": ua.random  
  25.     }  
  26.     return headers   
  27. def scrape_html(url):  
  28.     resp = requests.get(url, headers=random_ua())  
  29.     # print(resp.status_code, type(resp.status_code))  
  30.     if resp.status_code == 200:  
  31.         return resp.text 
  32.      else:  
  33.         logging.info('請求網頁失敗')  
  34. def get_data(page):  
  35.     global rank  
  36.     url = f"https://movie.douban.com/top250?start={25 * page}&filter="  
  37.     html_text = scrape_html(url)  
  38.     doc = pq(html_text)  
  39.     lis = doc('.grid_view li')  
  40.     for li in lis.items():  
  41.         name = li('.hd a span:first-child').text()  
  42.         temp = li('.bd p:first-child').text().split('\n')  
  43.         director_actor = temp[0]  
  44.         temptemp1 = temp[1].rsplit('/', 2)  
  45.         time_, area, genres = [item.strip() for item in temp1]  
  46.         quote = li('.quote span').text()  
  47.         rating_score = li('.star .rating_num').text()  
  48.         rating_num = li('.star span:last-child').text()  
  49.         sheet.append([rank, name, director_actor, time_, area, genres, rating_score, rating_num, quote])  
  50.         logging.info([rank, name, director_actor, time_, area, genres, rating_score, rating_num, quote])  
  51.         rank += 1 
  52. if __name__ == '__main__':  
  53.     rank = 1  
  54.     for i in range(10):  
  55.         get_data(i)  
  56.     wb.save(filename='movie_info3.xlsx'

五、Xpath

Xpath是一個非常好用的解析方法,同時也作為爬蟲學習的基礎,在后面的 Selenium 以及 Scrapy 框架中也會涉及到這部分知識。

首先我們使用 lxml 的 etree 庫,然后利用 etree.HTML 初始化,然后我們將其打印出來。其中,這里體現了 lxml 的一個非常實用的功能就是自動修正 html 代碼,大家應該注意到了,最后一個 li 標簽,其實我把尾標簽刪掉了,是不閉合的。不過,lxml 因為繼承了 libxml2 的特性,具有自動修正 HTML 代碼的功能,通過 xpath 表達式可以提取標簽里的內容,如下所示: 

  1. from lxml import etree  
  2. text = '' 
  3. <div>  
  4.     <ul>  
  5.          <li class="item-0"><a href="link1.html">first item</a></li>  
  6.          <li class="item-1"><a href="link2.html">second item</a></li>  
  7.          <li class="item-inactive"><a href="link3.html">third item</a></li>  
  8.          <li class="item-1"><a href="link4.html">fourth item</a></li>  
  9.          <li class="item-0"><a href="link5.html">fifth item</a>  
  10.      </ul>  
  11.  </div>  
  12. '''  
  13. html = etree.HTML(text)  
  14. result = etree.tostring(html)  
  15. result1 = html.xpath('//li/@class')   # xpath表達式  
  16. print(result1)  
  17. print(result)  
  1. ['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']  
  2. <html><body>  
  3. <div>  
  4.     <ul>  
  5.          <li class="item-0"><a href="link1.html">first item</a></li> 
  6.          <li class="item-1"><a href="link2.html">second item</a></li>  
  7.          <li class="item-inactive"><a href="link3.html">third item</a></li>  
  8.          <li class="item-1"><a href="link4.html">fourth item</a></li>  
  9.          <li class="item-0"><a href="link5.html">fifth item</a></li>  
  10.     </ul>  
  11. </div> 
  12. </body></html> 

代碼如下: 

  1. # -*- coding: UTF-8 -*-  
  2. """  
  3. @Author  :葉庭云  
  4. @公眾號  :修煉Python  
  5. @CSDN    :https://yetingyun.blog.csdn.net/  
  6. """  
  7. import requests  
  8. from lxml import etree  
  9. import openpyxl  
  10. from fake_useragent import UserAgent  
  11. import logging  
  12. # 日志輸出的基本配置  
  13. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s') 
  14. # 隨機產生請求頭  
  15. ua = UserAgent(verify_ssl=Falsepath='fake_useragent.json' 
  16. wb = openpyxl.Workbook()    # 創建工作簿對象  
  17. sheet = wb.active           # 獲取工作簿的活動表  
  18. sheet.title = "movie"       # 工作簿重命名  
  19. sheet.append(["排名", "電影名", "導演和主演", "上映時間", "上映地區", "電影類型", "評分", "評價人數", "引言"])  
  20. def random_ua():  
  21.     headers = {  
  22.         "Accept-Encoding": "gzip",  
  23.         "Connection": "keep-alive",  
  24.         "User-Agent": ua.random  
  25.     }  
  26.     return headers  
  27. def scrape_html(url):  
  28.     resp = requests.get(url, headers=random_ua())  
  29.     # print(resp.status_code, type(resp.status_code))  
  30.     if resp.status_code == 200:  
  31.         return resp.text  
  32.     else:  
  33.         logging.info('請求網頁失敗')  
  34. def get_data(page):  
  35.     global rank  
  36.     url = f"https://movie.douban.com/top250?start={25 * page}&filter="  
  37.     html = etree.HTML(scrape_html(url))  
  38.     lis = html.xpath('//ol[@class="grid_view"]/li')  
  39.     # 每個li標簽里有每部電影的基本信息  
  40.     for li in lis:  
  41.         name = li.xpath('.//div[@class="hd"]/a/span[1]/text()')[0]  
  42.         director_actor = li.xpath('.//div[@class="bd"]/p/text()')[0].strip()  
  43.         info = li.xpath('.//div[@class="bd"]/p/text()')[1].strip()  
  44.         # 按"/"切割成列表  
  45.         _info = info.split("/")  
  46.         # 得到 上映時間  上映地區  電影類型信息   去除兩端多余空格  
  47.         time_, area, genres = _info[0].strip(), _info[1].strip(), _info[2].strip()  
  48.         # print(time, area, genres)  
  49.         rating_score = li.xpath('.//div[@class="star"]/span[2]/text()')[0]  
  50.         rating_num = li.xpath('.//div[@class="star"]/span[4]/text()')[0]  
  51.         quote = li.xpath('.//p[@class="quote"]/span/text()')  
  52.         # 有些電影信息沒有一句話引言  加條件判斷  防止報錯  
  53.         if len(quote) == 0:  
  54.             quote = None  
  55.         else:  
  56.             quotequote = quote[0]  
  57.         sheet.append([rank, name, director_actor, time_, area, genres, rating_score, rating_num, quote])  
  58.         logging.info([rank, name, director_actor, time_, area, genres, rating_score, rating_num, quote])  
  59.         rank += 1  
  60. if __name__ == '__main__':  
  61.     rank = 1  
  62.     for i in range(10):  
  63.         get_data(i) 
  64.      wb.save(filename='movie_info1.xlsx'

六、總結

  •  爬取網頁數據用正則表達式的話,可以直接從網頁源代碼文本中匹配,但出錯率較高,且熟悉正則表達式的使用也比較難,需要經常翻閱文檔。
  •  實際爬取數據大多基于 HTML 結構的 Web 頁面,網頁節點較多,各種層級關系。可以考慮使用 Xpath 解析器、BeautifulSoup解析器、PyQuery CSS解析器抽取結構化數據,使用正則表達式抽取非結構化數據。
  •  Xpath:可在 XML 中查找信息;支持 HTML 的查找 ;通過元素和屬性進行導航,查找效率很高。在學習 Selenium 以及 Scrapy 框架中也都會用到。
  •  BeautifulSoup:依賴于 lxml 的解析庫,也可以從 HTML 或 XML 文件中提取數據。
  •  PyQuery:Python仿照 jQuery 嚴格實現,可以直接解析 DOM 節點的結構,并通過 DOM 節點的一些屬性快速進行內容提取。

對于爬取網頁結構簡單的 Web 頁面,有些代碼是可以復用的,如下所示: 

  1. from fake_useragent import UserAgent  
  2. # 隨機產生請求頭  
  3. ua = UserAgent(verify_ssl=Falsepath='fake_useragent.json' 
  4. def random_ua():  
  5.     headers = {  
  6.         "Accept-Encoding": "gzip",  
  7.         "User-Agent": ua.random  
  8.     }  
  9.     return headers 

偽裝請求頭,并可以隨機切換,封裝為函數,便于復用。 

  1. def scrape_html(url):  
  2.     resp = requests.get(url, headers=random_ua())  
  3.     # print(resp.status_code, type(resp.status_code))  
  4.     # print(resp.text)  
  5.     if resp.status_code == 200:  
  6.         return resp.text  
  7.     else:  
  8.         logging.info('請求網頁失敗') 

請求網頁,返回狀態碼為 200 說明能正常請求,并返回網頁源代碼文本。 

 

責任編輯:龐桂玉 來源: Python中文社區 (ID:python-china)
相關推薦

2011-06-22 15:21:08

XML

2009-03-31 13:12:30

解析XMLJava

2020-07-24 09:56:12

React開發數據

2014-03-17 09:22:43

Linux命令

2022-09-02 14:29:01

JavaScrip數組屬性

2023-03-17 10:51:26

2011-07-06 18:07:16

ASP

2010-08-31 15:51:51

DB2清除數據

2024-10-16 18:09:54

2009-02-25 09:52:14

類型轉換.NET 強制轉型

2020-08-10 00:30:55

備份密碼iPhone移動安全

2009-11-23 15:57:51

PHP偽靜態

2022-07-15 14:43:21

數據安全Linux

2018-03-05 22:25:21

數據中心降低成本停機

2009-09-17 16:55:58

C#組件設計

2010-03-18 17:57:37

Java XMLSoc

2014-02-28 10:50:24

Linux命令

2010-08-02 16:47:46

Flex

2021-09-03 11:24:04

云計算云計算環境云應用

2025-03-12 09:54:02

點贊
收藏

51CTO技術棧公眾號

荫蒂被男人添免费视频| 伊人久久大香线蕉成人综合网| 久久网一区二区| 亚洲国产欧美日韩在线观看第一区| 欧美午夜电影在线| 日韩国产精品一区二区三区| 国产情侣激情自拍| 国产欧美日本| 久久久国产精品视频| 日韩成人av一区二区| 国产成人精品亚洲日本在线观看| 亚洲免费观看视频| 欧美下载看逼逼| www.天天干.com| 久久蜜桃精品| 欧美激情综合色综合啪啪五月| 免费观看av网站| 精品三级久久久| 色中色一区二区| 免费观看亚洲视频| 成人18在线| 成av人片一区二区| 成人高h视频在线| www毛片com| 国户精品久久久久久久久久久不卡| 日韩av资源在线播放| 九九热精品国产| 日韩一区二区三区免费| 亚洲线精品一区二区三区| 亚洲乱码一区二区三区| 欧洲一区av| 99久久精品国产精品久久| 国产精品午夜国产小视频| 国产www在线| 亚洲精选一区| 欧美激情久久久久久| 久久久久麻豆v国产| 精品影片在线观看的网站| 精品成人私密视频| 亚洲图片 自拍偷拍| 日本综合视频| 91福利在线观看| 鲁一鲁一鲁一鲁一澡| 九色91在线| 一区二区三区不卡在线观看| 伊人色综合影院| 成年人在线视频| 国产亚洲美州欧州综合国| 精品视频第一区| 日韩中文字幕综合| 国产超碰在线一区| 91亚洲精品丁香在线观看| 一区二区日韩在线观看| 麻豆精品在线观看| 国产精品美乳在线观看| 最近日韩免费视频| 日韩av二区在线播放| 国产成人精品在线视频| 精品无码一区二区三区的天堂| 国产精品普通话对白| 51ⅴ精品国产91久久久久久| www.国产成人| 国产精品久久久久久久免费软件| 久久久久久久久中文字幕| 欧美丰满艳妇bbwbbw| 国产综合自拍| 8x海外华人永久免费日韩内陆视频| 国产无遮无挡120秒| 激情欧美国产欧美| 97人人模人人爽人人喊中文字| 国产一级视频在线观看| 亚洲欧洲午夜| 日本成人激情视频| 欧美高清69hd| 国内精品不卡在线| 国产精品 日韩| 亚洲三级中文字幕| 国产网站一区二区| 一区二区三区四区国产| 国产日产一区二区| 亚洲成人动漫在线观看| 欧美精品一区免费| 日本在线中文字幕一区二区三区| 欧美猛男超大videosgay| 午夜福利123| 久久综合五月婷婷| 中文字幕av一区二区| 制服丨自拍丨欧美丨动漫丨| 真实国产乱子伦精品一区二区三区| 九九九久久久久久| 日本天堂网在线| 蜜桃av一区二区在线观看 | 女海盗2成人h版中文字幕| 一本久道中文字幕精品亚洲嫩| 999精品视频在线| 日本一区二区三区播放| 日韩av在线免费观看一区| 天堂资源在线视频| 国内成人在线| 国产精品扒开腿做| www.av日韩| 久久精品人人做人人综合| 国产欧美自拍视频| 欧美舌奴丨vk视频| 精品日韩在线一区| 综合 欧美 亚洲日本| 欧美日韩国产综合网| 欧洲中文字幕国产精品| 国产精品久久久久精| 91原创在线视频| 欧美aaa在线观看| 亚洲天堂导航| 日韩欧美黄色影院| 性猛交ⅹxxx富婆video | 日韩中文字幕国产| 国产成人在线播放视频| 国精产品一区一区三区mba视频| 精品国产aⅴ麻豆| 免费黄色在线网站| 日韩欧美中文字幕在线播放| 奇米777在线| jvid福利在线一区二区| 午夜精品久久久久久久男人的天堂| 中文字幕一区二区人妻痴汉电车| 99国产精品99久久久久久| 九一免费在线观看| 日本在线视频一区二区| 亚洲欧美激情精品一区二区| 黄色一级视频在线观看| 精品一区二区免费视频| 亚洲二区三区四区| 大胆人体一区| 日韩成人激情视频| 日本在线观看视频网站| 国产伦精品一区二区三区免费迷| 亚洲欧美成人一区| av在线一区不卡| 亚洲色图在线观看| 中文字幕亚洲精品一区| 成人国产精品免费| 久无码久无码av无码| 日韩中文字幕视频网| 另类少妇人与禽zozz0性伦| 日韩久久久久久久久久| 国产三级精品三级在线专区| 日韩久久一级片| 婷婷成人影院| 欧美在线中文字幕| 亚洲色欧美另类| 精品动漫一区二区| 朝桐光av一区二区三区| 在线观看日韩av电影| 国产伦精品一区二区三区视频免费 | 天堂√中文最新版在线| 亚洲福利在线视频| 日本特黄特色aaa大片免费| 成人丝袜视频网| 全黄性性激高免费视频| 国产精品极品| 992tv成人免费影院| 天堂在线观看视频| 色综合久久久久久久久久久| 久久精品老司机| 亚洲永久字幕| 涩涩涩999| 久久久加勒比| 超在线视频97| 蜜臀久久精品久久久久| 天天综合天天做天天综合| 国产精品嫩草av| 久久久久一区| 宅男在线精品国产免费观看| 日韩激情欧美| 7777免费精品视频| 国产高清视频在线观看| 欧美日韩中文一区| 黑鬼狂亚洲人videos| 成人午夜电影久久影院| 中国丰满人妻videoshd| 精品日本12videosex| 成人精品一区二区三区电影免费 | 亚洲视频在线观看一区二区三区| 成人系列视频| 91国产在线播放| 欧美三级网站| 中文字幕亚洲欧美在线| 国产高清在线观看视频| 精品国产91久久久久久老师| 欧美三级视频网站| 国产精品综合二区| 欧美日韩在线一| 日韩中文在线电影| 精品福利影视| 伊人亚洲精品| 欧美尤物巨大精品爽| 色网站在线看| 亚洲精品国产精品国产自| 中文字幕 视频一区| 一级中文字幕一区二区| 国产真实乱人偷精品人妻| 久久超碰97中文字幕| 日韩a∨精品日韩在线观看| 欧美在线观看视频一区| 国产精品久久精品国产| 国产精品一二三产区| 久久亚洲春色中文字幕| 涩涩视频在线观看免费| 日韩一区二区高清| 亚洲精品一区二三区| 亚洲综合色在线| 免费黄色国产视频| 91美女精品福利| 国产精品一区二区羞羞答答| 亚洲经典三级| 日本一区二区三区四区五区六区| 女厕嘘嘘一区二区在线播放 | 自拍偷拍亚洲综合| 国产三级视频网站| 国产盗摄精品一区二区三区在线| 日本xxxxxxx免费视频| 亚洲黄网站黄| 伊人久久在线观看| 日韩免费在线| 噜噜噜噜噜久久久久久91| 亚洲三级av| 成人精品久久一区二区三区| 日本成人福利| 日韩av免费在线播放| 成年男女免费视频网站不卡| 欧美日韩国产成人在线| 免费**毛片在线| 中文字幕久久亚洲| 番号集在线观看| 亚洲色图25p| 少妇激情av一区二区| 亚洲第一网中文字幕| 亚洲第一视频在线| 日韩午夜中文字幕| 国产乱码精品一区二区三区精东| 在线观看不卡视频| www.色国产| 色综合久久久久综合体| 久草手机在线视频| 岛国av在线不卡| 免费看日韩毛片| 精品久久久久久久久久国产| 欧美亚洲天堂网| 亚洲最色的网站| 麻豆视频在线观看| 一区二区三区欧美在线观看| 欧洲第一无人区观看| 亚洲色图第一区| 黑鬼狂亚洲人videos| 亚洲免费视频成人| 欧美成人精品欧美一| 尤物av一区二区| 在线免费观看毛片| 五月激情综合网| 国产午夜精品久久久久| 91精品办公室少妇高潮对白| 懂色av蜜臀av粉嫩av分享吧最新章节| 日韩欧美在线网址| 亚洲视频中文字幕在线观看| 5月丁香婷婷综合| www.狠狠干| 亚洲国产精品电影| 欧美孕妇性xxxⅹ精品hd| 亚洲人成网站色ww在线| 国产乱理伦片a级在线观看| 中文字幕国产亚洲| 黄色网址在线免费| 欧美精品成人91久久久久久久| 九色porny自拍视频在线观看 | 亚洲最新av在线网站| 婷婷五月在线视频| 欧美精品在线免费| 午夜伦理福利在线| 国产日本欧美一区二区三区| 国产不卡精品| 精品一区日韩成人| 色乱码一区二区三区网站| 蜜臀av.com| 亚洲永久在线| www.亚洲自拍| 99久久婷婷国产精品综合| 国产一区二区三区精品在线| 亚洲黄色免费电影| 青青青国产在线 | 午夜精品久久久久久久99黑人 | 91最新国产视频| 三级精品视频| 欧美性视频在线播放| 99热这里只有精品8| 日本激情视频在线播放| 国产91精品免费| 免费看污片网站| 尤物在线观看一区| 久久这里只有精品9| 精品日韩在线一区| 五月婷婷在线观看| 91av在线网站| 国产精品视频一区二区三区| 久久青青草原一区二区| 亚洲欧洲日韩| 日韩精品免费播放| 丰满少妇久久久久久久| 成人黄色a级片| 亚洲va国产va欧美va观看| 97精品人妻一区二区三区香蕉| 亚洲黄色www| 99福利在线| 国产精品一二三视频| 久久久久久久久久久久久久久久久久久久| 亚洲国产欧洲综合997久久| 亚洲国产精品第一区二区| 亚洲自拍第三页| 中文子幕无线码一区tr| 日韩欧美成人一区二区三区 | 欧美最猛黑人xxxx黑人猛叫黄| gogo大尺度成人免费视频| 日韩一区不卡| 亚洲美女少妇无套啪啪呻吟| 一级 黄 色 片一| 欧美激情一区在线观看| 精品成人久久久| 欧美大片一区二区| 成视频免费观看在线看| 国产精品美女主播| 黑人操亚洲人| 久章草在线视频| 99精品久久只有精品| 国产在线视频二区| 欧美成人乱码一区二区三区| 黄网站免费在线播放| 国产精品一香蕉国产线看观看| 久久综合影院| 激情网站五月天| 久久嫩草精品久久久精品| 亚洲欧美在线观看视频| 欧美精品一区二区三区高清aⅴ | 98精品国产自产在线观看| 911精品国产| 黄色一级大片免费| 国产成人在线电影| 久久久久久久9999| 精品人伦一区二区色婷婷| 中文在线观看免费| 91精品国产91久久久久青草| 一区二区在线影院| 国产伦理在线观看| 一区二区三区精品久久久| 性一交一乱一乱一视频| 欧美激情视频在线免费观看 欧美视频免费一 | 无码人妻一区二区三区在线视频| 亚洲视频免费在线| 国产成人精品无码高潮| 欧美高清视频在线| 一区二区三区欧洲区| www.好吊操| 91在线云播放| 亚洲欧美另类在线视频| 一本一本久久a久久精品牛牛影视| 成人va天堂| 在线观看成人一级片| 国产精品一区二区三区网站| 久青草视频在线观看| 亚洲激情自拍图| 三上悠亚激情av一区二区三区| 日日噜噜噜噜夜夜爽亚洲精品| 青青草视频一区| 无码人妻精品一区二区三区夜夜嗨| 欧美一卡二卡三卡四卡| 欧美人与动牲性行为| 裸模一区二区三区免费| 美女视频免费一区| 免费视频一二三区| 亚洲精品影视在线观看| 成人午夜一级| 久久www视频| 久久一区二区三区国产精品| 中文字字幕在线中文乱码| 久久91精品国产91久久跳| 青青久久av| 中文字幕22页| 亚洲国产欧美另类丝袜| 国产一级片在线播放| 91在线观看免费观看| 在线一区视频| 97精品在线播放| 亚洲国产精品小视频| 色猫猫成人app| 成人在线国产视频| 国产人妖乱国产精品人妖| 国产浮力第一页| 人妖精品videosex性欧美| 91成人看片| 国产高潮呻吟久久| 精品日韩成人av| 欧洲美女精品免费观看视频 | 夜夜嗨av色一区二区不卡|