精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲调教欧美在线| 色欲色香天天天综合网www| 91精品人妻一区二区三区果冻| 国产精品久久久久无码av| 日韩欧美国产一区在线观看| 男人用嘴添女人下身免费视频| 精品99又大又爽又硬少妇毛片 | 成人午夜在线免费| 日韩av观看网址| 极品久久久久久| 国产一区二区欧美| 欧美精品一区二区三区视频| 欧美伦理片在线看| 美女精品视频| 亚洲欧洲日产国码二区| 精品在线不卡| 国产成人精品毛片| 日本成人超碰在线观看| 欧美精品video| 成年人免费视频播放| 伊人久久综合影院| 欧美电影免费观看完整版| 男操女免费网站| 伊人色综合一区二区三区影院视频 | 国产专区精品视频| 中文字幕一区二区人妻视频| 欧美日韩视频一区二区三区| 一区二区三区回区在观看免费视频| 国产成人精品综合久久久久99| 91精品影视| 疯狂做受xxxx高潮欧美日本| 欧美三级午夜理伦三级老人| 成年人视频在线观看免费| 成人av网址在线| av在线亚洲男人的天堂| 国产老女人乱淫免费| 日韩国产在线一| 欧美怡春院一区二区三区| 久久成人在线观看| 欧美不卡视频| 九九视频直播综合网| 多男操一女视频| 日韩毛片视频| 这里只有精品在线播放| a视频免费观看| 国产精品videossex| 宅男噜噜噜66一区二区66| 亚洲天堂2018av| 成人黄色免费网站| 欧美在线你懂得| 国产免费人做人爱午夜视频| 高清不卡av| 91九色02白丝porn| 国产主播中文字幕| 亚洲不卡系列| 欧美日韩精品一二三区| 精品亚洲一区二区三区四区| 日韩av超清在线观看| 91国产成人在线| 国产成人精品视频ⅴa片软件竹菊| 日本不良网站在线观看| 欧美视频一二三| 999精品网站| 电影亚洲一区| 777色狠狠一区二区三区| 国产精品中文久久久久久| 奇米一区二区| 亚洲成人黄色在线观看| 国产精品无码在线| 国内黄色精品| 久久亚洲精品视频| 精品无码人妻一区二区三区品| 在线观看视频日韩| 国产97在线|日韩| 中文有码在线播放| 国产高清亚洲一区| 精品国产区在线| 国产色在线 com| 亚洲欧美日韩国产综合在线| 真实国产乱子伦对白视频| 超碰在线公开| 欧美在线视频不卡| 曰本三级日本三级日本三级| 日韩理论电影中文字幕| 一区二区成人精品| 九九热这里有精品视频| 免播放器亚洲| 91欧美视频网站| 天天干天天做天天操| 国产精品污www在线观看| 精品国产一区二区三区在线| 欧美aa一级| 欧美日韩午夜在线| 国产婷婷在线观看| 欧美日韩一二| 欧美精品18videosex性欧美| 18国产精品| 日韩欧美一级片| 亚洲成人av免费在线观看| 成人影视亚洲图片在线| 九九精品视频在线观看| 高潮毛片又色又爽免费| 精品一区二区国语对白| 国产伦精品一区二区三区视频黑人| 精品视频三区| 夜夜精品浪潮av一区二区三区| 国产91对白刺激露脸在线观看| 日本a人精品| 亚洲国产日韩欧美在线图片| 国产真人真事毛片视频| 亚洲精品乱码| 91在线视频免费| 黄色大片在线看| 亚洲国产精品一区二区www | 亚洲毛片亚洲毛片亚洲毛片| 亚洲网站啪啪| 国产日韩换脸av一区在线观看| 免费看黄网站在线观看| 国产精品福利影院| 久草青青在线观看| av男人一区| 萌白酱国产一区二区| 波多野结衣理论片| av一区二区不卡| 国产专区在线视频| 日韩黄色三级| 国产亚洲精品美女久久久| 亚洲一区 视频| 国产福利一区二区三区视频在线| 亚洲国产高清国产精品| 久久精品女人天堂av免费观看 | 久久国产日韩欧美| 欧美hdxxxx| 91精品国产综合久久蜜臀| 人人爽人人爽人人片| 亚洲欧美清纯在线制服| 国产乱码精品一区二区三区卡| 麻豆tv免费在线观看| 欧美偷拍一区二区| 先锋影音av在线| 日韩精品色哟哟| 日韩高清国产精品| 性欧美hd调教| 中文字幕欧美日韩精品| 五月天中文字幕| 国产欧美日韩三级| 韩国中文字幕av| 精品国产一区二区三区香蕉沈先生 | 亚洲成人动漫在线播放| 精品99在线观看| 成人免费视频一区| 国产a级片网站| 日韩精品欧美大片| 国产激情999| 成人福利在线| 欧美丰满少妇xxxxx高潮对白| 国产喷水在线观看| 国产一区二区在线观看视频| 伊人色综合影院| 成人影院网站ww555久久精品| 久久久999精品免费| 国产三级在线观看视频| 亚洲乱码中文字幕| 在线天堂www在线国语对白| 99日韩精品| 日韩精品一区二区三区丰满| av在线一区不卡| 菠萝蜜影院一区二区免费| 国产高清视频免费| 偷拍一区二区三区四区| 91中文字幕永久在线| 久久精品久久综合| 美女av免费观看| 青青草原在线亚洲| 国产精自产拍久久久久久蜜| 91精选在线| 日韩精品极品毛片系列视频| 久久久精品毛片| 亚洲精品视频在线观看网站| www男人天堂| 久久久久久久欧美精品| 亚洲精品日韩成人| 亚洲综合影院| 日韩美女写真福利在线观看| 午夜精品一区| 亚洲成色999久久网站| 亚洲GV成人无码久久精品| 国产精品伦理在线| 少妇一级淫免费观看| 美女视频黄a大片欧美| 欧美黄网在线观看| 杨幂一区二区三区免费看视频| 国产在线观看一区二区三区| 嗯~啊~轻一点视频日本在线观看| 亚洲天堂网在线观看| 国产suv精品一区二区69| 高跟丝袜一区二区三区| 欧美精品久久久久久久久46p| 波多野结衣中文一区| av亚洲天堂网| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲国产日韩欧美| 天海翼亚洲一区二区三区| 成人在线播放av| 成人免费网站视频| 欧美激情视频给我| 日本视频在线| 亚洲精品在线观看网站| 亚洲香蕉在线视频| 一本到不卡免费一区二区| 国产免费久久久久| 国产欧美精品一区二区色综合| 国产麻豆剧传媒精品国产| 奇米影视在线99精品| 亚洲 高清 成人 动漫| 中文字幕一区二区三三| 五月天丁香综合久久国产 | 先锋欧美三级| 97免费在线视频| 午夜dj在线观看高清视频完整版 | 在线中文字幕电影| 一区二区日韩精品| 欧美日本韩国一区二区| 亚洲成人av在线| 国产sm主人调教女m视频| 欧美日韩精品一区视频| 丰满熟女人妻一区二区三| 日韩欧美第一页| 日韩免费一级片| 一区二区三区中文在线| 四虎精品免费视频| 国产精品日产欧美久久久久| 欧美多人猛交狂配| 91麻豆swag| 一区二区不卡免费视频| 不卡的av网站| 亚洲国产第一区| a级高清视频欧美日韩| 国产精品熟妇一区二区三区四区| 国产又黄又大久久| 亚洲一二三不卡| 国产呦精品一区二区三区网站| 天天爽天天爽夜夜爽| 日韩福利电影在线| 热久久精品免费视频| 天堂久久一区二区三区| 亚洲成人av免费看| 轻轻草成人在线| av在线免费看片| 国产一区 二区 三区一级| 亚洲男人天堂2021| 国产精品1区二区.| 中国特级黄色大片| 99久久99久久精品国产片果冻| av网页在线观看| 97se亚洲国产综合在线| 欧美做受xxxxxⅹ性视频| 国产午夜精品一区二区三区嫩草| www.久久国产| 亚洲国产成人午夜在线一区| 99自拍偷拍视频| 亚洲精品日韩一| 日本三级免费看| 色综合天天综合给合国产| 久久久久久久亚洲| 欧美日韩dvd在线观看| 国产高清视频免费观看| 亚洲国产高清高潮精品美女| 麻豆影视在线| 深夜精品寂寞黄网站在线观看| 黄a在线观看| 97精品免费视频| 日韩一区二区三区在线免费观看| 国产一区香蕉久久| 成人精品动漫一区二区三区| 精品日产一区2区三区黄免费| 久久99久久人婷婷精品综合| 一级一片免费播放| 99在线精品视频在线观看| 亚洲精品一二三四五区| 国产精品99久久久| 国产特黄级aaaaa片免| 中文字幕一区二区三区不卡在线| 全程偷拍露脸中年夫妇| 欧美性猛交xxx| 国产免费不卡av| 日韩电影大全免费观看2023年上 | 国产精品青草久久| 日韩激情一区二区三区| 在线观看av不卡| 丰满少妇一级片| 一本色道久久综合狠狠躁篇怎么玩| 国产在线观看免费麻豆| 97香蕉久久超级碰碰高清版| 国产精品久久乐| 国内精品国语自产拍在线观看| 欧美视频网址| 奇米影视亚洲色图| 久久国产精品免费| aaaaaav| 亚洲精品日韩综合观看成人91| 国产一区免费看| 亚洲第一视频网站| 国产黄a三级三级三级av在线看| 日本在线观看天堂男亚洲| 在线综合色站| 亚洲一区二区三区欧美| 国产一区二区三区久久| 三级网站免费看| 日本一区二区三区视频视频| 日韩av一二三区| 日韩午夜激情av| 9191在线观看| 欧洲亚洲女同hd| 9999久久久久| 艳母动漫在线免费观看| 日韩电影在线观看电影| 中出视频在线观看| 亚洲成人精品在线观看| aaa一区二区| xvideos亚洲人网站| 三级成人黄色影院| 国产一区再线| 国内揄拍国内精品久久| 亚洲无在线观看| 国产精品久久久99| 亚洲 小说区 图片区| 国产丝袜一区二区三区免费视频| 福利网站在线观看| 99久热re在线精品视频| 伊人久久大香线| 午夜福利123| 亚洲色图欧美在线| 国产乱码久久久久| 日韩亚洲欧美中文高清在线| 欧美日韩视频免费观看| 欧美日韩最好看的视频| 久久精品毛片| 无码人妻精品一区二区中文| 欧美日韩精品二区| 男女av在线| 国产精品9999| 日韩欧美一区二区三区免费看| 日韩一级片播放| 国产精品午夜久久| 一本一道人人妻人人妻αv | 国产麻豆a毛片| 欧美电影一区二区三区| 黄色免费网站在线观看| 国产在线久久久| 午夜影院欧美| 免费看三级黄色片| 亚洲成人综合网站| 无码精品一区二区三区在线| 2018国产精品视频| 国产传媒欧美日韩成人精品大片| 欧美激情成人网| 中文字幕免费观看一区| 一级黄色片视频| 欧美精品免费看| 欧美激情15p| 男人舔女人下面高潮视频| 国产精品乱码人人做人人爱 | 国产精品亚洲专一区二区三区| 欧美成欧美va| 亚洲精品第一页| 日本.亚洲电影| 先锋影音男人资源| 丁香另类激情小说| 精品国产xxx| 久久精品中文字幕| 成人h动漫精品一区二区器材| 欧美变态另类刺激| 欧美国产视频在线| av官网在线观看| 91av在线不卡| 清纯唯美日韩| 亚洲少妇一区二区| 日本精品免费观看高清观看| 欧美激情办公室videoshd| 国产精品三区四区| 日本伊人精品一区二区三区观看方式| 欧美一级特黄高清视频| 亚洲福利视频专区| 国产亚洲欧美日韩精品一区二区三区 | 92看片淫黄大片欧美看国产片| 国内揄拍国内精品久久| 国产伦理片在线观看| 日韩一区二区三区电影在线观看 | 无码人妻精品一区二区三应用大全| 欧亚一区二区三区| 国产区美女在线| 亚洲一区二区三区欧美| 99久久国产综合精品色伊| 亚洲无码精品在线观看| 2025国产精品视频| 欧美一区综合| 亚洲第一综合网| 亚洲国产福利在线| 久久免费福利|