日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块)

發(fā)布時間:2023/12/29 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

一、BeautifulSoup

1. 簡介

簡單來說,Beautiful Soup是python的一個庫,最主要的功能是從網頁抓取數(shù)據(jù)。官方解釋如下:

''' Beautiful Soup提供一些簡單的、python式的函數(shù)用來處理導航、搜索、修改分析樹等功能。 它是一個工具箱,通過解析文檔為用戶提供需要抓取的數(shù)據(jù),因為簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。 '''

Beautiful Soup?是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫.它能夠通過你喜歡的轉換器實現(xiàn)慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節(jié)省數(shù)小時甚至數(shù)天的工作時間.你可能在尋找?Beautiful Soup3?的文檔,Beautiful Soup 3 目前已經停止開發(fā),官網推薦在現(xiàn)在的項目中使用Beautiful Soup 4。

安裝

pip3 install bs4

解析器

pip3 install lxml

另一個可供選擇的解析器是純Python實現(xiàn)的 html5lib , html5lib的解析方式與瀏覽器相同,可以選擇下列方法來安裝html5lib:

pip install html5lib

解析器對比:

官方文檔

?

簡單使用

下面的一段HTML代碼將作為例子被多次用到.這是?愛麗絲夢游仙境的?的一段內容(以后內容中簡稱為?愛麗絲?的文檔):

html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p><p class="story">...</p> """

上面這段代碼不是完整的html標簽,為什么呢?它沒有body和html的結束標簽!

沒關系,bs4有容錯機制!

?

使用BeautifulSoup解析這段代碼,能夠得到一個?BeautifulSoup?的對象

from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'html.parser')

從文檔中找到所有<a>標簽的鏈接:

for link in soup.find_all('a'):print(link.get('href'))

執(zhí)行輸出:

http://example.com/elsie http://example.com/lacie http://example.com/tillie View Code

?

從文檔中獲取所有文字內容:

print(soup.get_text())

?執(zhí)行輸出:

The Dormouse's story The Dormouse's story Once upon a time there were three little sisters; and their names were Elsie, Lacie and Tillie; and they lived at the bottom of a well. ... View Code

?

2. 標簽對象

通俗點講就是 HTML 中的一個個標簽,Tag?對象與XML或HTML原生文檔中的tag相同:

from bs4 import BeautifulSoupsoup = BeautifulSoup('<b class="boldest">Extremely bold</b>','html.parser') tag = soup.b print(type(tag))

執(zhí)行輸出:<class 'bs4.element.Tag'>

?

Tag的名字

soup對象再以愛麗絲夢游仙境的html_doc為例,操作文檔樹最簡單的方法就是告訴它你想獲取的tag的name.如果想獲取 <head> 標簽,只要用?soup.head?:

from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'html.parser')soup = soup.head # 獲取head標簽 print(soup)soup = soup.title # 獲取title標簽 print(soup)

執(zhí)行輸出:

<head><title>The Dormouse's story</title></head> <title>The Dormouse's story</title> View Code

?

這是個獲取tag的小竅門,可以在文檔樹的tag中多次調用這個方法.下面的代碼可以獲取<body>標簽中的第一個<b>標簽:

soup = soup.body.b # <body>標簽中的第一個<b>標簽 print(soup) # <b>The Dormouse's story</b>

?

通過點取屬性的方式只能獲得當前名字的第一個tag:

soup = soup.a # 第一個a標簽 print(soup) # <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

?

如果想要得到所有的<a>標簽,或是通過名字得到比一個tag更多的內容的時候,就需要用到?Searching the tree?中描述的方法,比如: find_all()

soup = soup.find_all('a') # 所有a標簽 print(soup)

執(zhí)行輸出:

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] View Code

結果是一個列表!

?

我們可以利用 soup加標簽名輕松地獲取這些標簽的內容,注意,它查找的是在所有內容中的第一個符合要求的標簽。

?

Tag的name和attributes屬性

Tag有很多方法和屬性,主要是 標簽對象的名稱,屬性,文本。

現(xiàn)在介紹一下tag中最重要的屬性: name和attributes

名稱和屬性

每個tag都有自己的名字,通過.name?來獲取:

from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'html.parser')soup = soup.find_all('a') # 所有a標簽for link in soup:print(link.name) # 標簽名print(link.get('id')) # id屬性print(link.get('class')) # class屬性print(link.get('href')) # herf屬性print(link.attrs) # 標簽所有屬性# {'href': 'http://example.com/tillie', 'class': ['sister'], 'id': 'link3'}

?

tag的屬性可以被添加,刪除或修改. 再說一次, tag的屬性操作方法與字典一樣

修改

from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'html.parser')soup = soup.find_all('a') # 所有a標簽 soup[0]['class'] = 'verybold' # 修改class屬性 soup[0]['id'] = 1 # 修改id屬性 print(soup[0]) # <a class="verybold" href="http://example.com/elsie" id="1">Elsie</a>

?

刪除

soup = soup.find_all('a') # 所有a標簽del soup[0]['class'] del soup[0]['id'] print(soup[0]) # <a href="http://example.com/elsie">Elsie</a>

?

文本獲取

標簽對象的文本獲取

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc, 'html.parser') print(soup.p.string) # p下的文本只有一個時,取到,否則為None print(soup.p.strings) # 拿到一個生成器對象, 取到p下所有的文本內容 print(soup.p.text) #取到p下所有的文本內容 for line in soup.stripped_strings: #去掉空白print(line)

執(zhí)行輸出:

The Dormouse's story <generator object _all_strings at 0x000001AA3941C5C8> The Dormouse's story The Dormouse's story The Dormouse's story Once upon a time there were three little sisters; and their names were Elsie , Lacie and Tillie ; and they lived at the bottom of a well. ... View Code

?

如果tag包含了多個子節(jié)點,tag就無法確定 .string 方法應該調用哪個子節(jié)點的內容, .string 的輸出結果是 None,如果只有一個子節(jié)點那么就輸出該子節(jié)點的文本,比如下面的這種結構,soup.p.string 返回為None,但soup.p.strings就可以找到所有文本

from bs4 import BeautifulSouptmp_html= """<p id='list-1'>哈哈哈哈<a class='sss'><span><h1>aaaa</h1></span></a><b>bbbbb</b> </p>""" soup = BeautifulSoup(tmp_html, 'html.parser') print(soup.p.string) # p下的文本只有一個時,取到,否則為None print(soup.p.strings) # 拿到一個生成器對象, 取到p下所有的文本內容for i in soup.stripped_strings:print('-->',i)

執(zhí)行輸出:

None <generator object _all_strings at 0x000002017427C570> --> 哈哈哈哈 --> aaaa --> bbbbb

因此,使用?string,標簽下的文本只能有一個,否則返回None!

而使用text,返回所有文本!

?

這就是tag.text和tag.string的區(qū)別!

?

3.遍歷文檔樹

關于DOM數(shù),請參考鏈接:

https://www.cnblogs.com/majj/p/9102890.html

?

1、嵌套選擇

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc, 'html.parser') print(soup.head.title.string) # The Dormouse's story print(soup.body.a.string) # Elsie

?

2、子節(jié)點、子孫節(jié)點

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc, 'html.parser')print(soup.p.contents) #p下所有子節(jié)點 print(soup.p.children) #得到一個迭代器,包含p下所有子節(jié)點for i,child in enumerate(soup.p.children):print(i,child)print(soup.p.descendants) #獲取子孫節(jié)點,p下所有的標簽都會選擇出來 for i,child in enumerate(soup.p.descendants):print(i,child)

?

3、父節(jié)點、祖先節(jié)點

print(soup.a.parent) #獲取a標簽的父節(jié)點 print(soup.a.parents) #找到a標簽所有的祖先節(jié)點,父親的父親,父親的父親的父親...

?soup.a.parents 最終返回的節(jié)點是<html>...</html>。也就是說,它直接回到頂層了!

?

4、兄弟節(jié)點

print('=====>') print(soup.a.next_sibling) #下一個兄弟 print(soup.a.previous_sibling) #上一個兄弟print(list(soup.a.next_siblings)) #下面的兄弟們=>生成器對象 print(soup.a.previous_siblings) #上面的兄弟們=>生成器對象

?

4. 搜索文檔樹

BeautifulSoup定義了很多搜索方法,這里著重介紹2個: find() 和 find_all() .其它方法的參數(shù)和用法類似

1、五種過濾器

搜索文檔樹:BeautifulSoup定義了很多搜索方法,這里著重介紹2個: find() 和 find_all() .其它方法的參數(shù)和用法類似

html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p id="my p" class="title"><b id="bbb" class="boldest">The Dormouse's story</b> </p><p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p><p class="story">...</p> """from bs4 import BeautifulSoup soup=BeautifulSoup(html_doc,'lxml')

五種過濾器: 字符串、正則表達式、列表、True、方法

?

1.1、字符串:即標簽名

print(soup.find_all('b'))

執(zhí)行輸出:?

[<b class="boldest" id="bbb">The Dormouse's story</b>]

?

1.2、正則表達式

import re print(soup.find_all(re.compile('^b'))) #找出b開頭的標簽,結果有body和b標簽

執(zhí)行輸出:

[<body> <p class="title" id="my p"><b class="boldest" id="bbb">The Dormouse's story</b> </p> <p class="story">Once upon a time there were three little sisters; and their names were <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> </body>, <b class="boldest" id="bbb">The Dormouse's story</b>] View Code

?

1.3、列表

如果傳入列表參數(shù),Beautiful Soup會將與列表中任一元素匹配的內容返回.下面代碼找到文檔中所有<a>標簽和<b>標簽:

print(soup.find_all(['a','b']))

執(zhí)行輸出:

[<b class="boldest" id="bbb">The Dormouse's story</b>, <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] View Code

?

1.4、True

可以匹配任何值,下面代碼查找到所有的tag,但是不會返回字符串節(jié)點

print(soup.find_all(True)) for tag in soup.find_all(True):print(tag.name)

這個不怎么用,可以忽略掉!?

?

1.5、方法

如果沒有合適過濾器,那么還可以定義一個方法,方法只接受一個元素參數(shù) ,如果這個方法返回 True 表示當前元素匹配并且被找到,如果不是則反回 False

from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml')def has_class_but_no_id(tag): # 有class但是沒有id屬性的標簽return tag.has_attr('class') and not tag.has_attr('id')print(soup.find_all(has_class_but_no_id)) # 將每一個標簽傳給這個方法過濾

?

執(zhí)行輸出:

[<p class="story">Once upon a time there were three little sisters; and their names were <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>; and they lived at the bottom of a well.</p>, <p class="story">...</p>] View Code

最終輸出的,都是有class屬性,但是沒有id屬性的標簽

?

2、find_all()

語法

find_all( name , attrs , recursive , text , **kwargs )

?

2.1、name

搜索name參數(shù)的值可以使任一類型的 過濾器 ,字符竄,正則表達式,列表,方法或是 True?

from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml')import re print(soup.find_all(name=re.compile('^t')))

執(zhí)行輸出:

[<title>The Dormouse's story</title>]

?

2.2、keyword

key=value的形式,value可以是過濾器:字符串 , 正則表達式 , 列表, True?

print(soup.find_all(id=re.compile('my'))) # 查找id含有my屬性的標簽 # 查找herf含有l(wèi)acle以及id帶有數(shù)字的標簽。 # 如果是class屬性,需要使用class_,因為在python中,class是關鍵字! print(soup.find_all(href=re.compile('lacie'),id=re.compile('\d'))) print(soup.find_all(id=True)) #查找有id屬性的標簽

執(zhí)行輸出:

[<p class="title" id="my p"><b class="boldest" id="bbb">The Dormouse's story</b> </p>] [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>] [<p class="title" id="my p"><b class="boldest" id="bbb">The Dormouse's story</b> </p>, <b class="boldest" id="bbb">The Dormouse's story</b>, <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] View Code

?

有些tag屬性在搜索不能使用,比如HTML5中的 data-* 屬性:

data_soup = BeautifulSoup('<div data-foo="value">foo!</div>','lxml') data_soup.find_all(data-foo="value") #報錯:SyntaxError: keyword can't be an expression

?

但是可以通過 find_all() 方法的 attrs 參數(shù)定義一個字典參數(shù)來搜索包含特殊屬性的tag:

from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml')data_soup = BeautifulSoup('<div data-foo="value">foo!</div>','lxml') print(data_soup.find_all(attrs={"data-foo": "value"})) # [<div data-foo="value">foo!</div>]

?

2.3、按照類名查找

注意關鍵字是class_,class_=value,value可以是五種選擇器之一

from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml') import re print(soup.find_all('a',class_='sister')) #查找類為sister的a標簽 print(soup.find_all('a',class_='sister ssss')) #查找類為sister和sss的a標簽,順序錯誤也匹配不成功 print(soup.find_all(class_=re.compile('^sis'))) #查找類為sister的所有標簽

執(zhí)行輸出:

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] [] [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] View Code

?

2.4、attrs

如果有多個屬性,在attrs里面增加key-value即可

# 查詢p標簽,class屬性為story print(soup.find_all('p',attrs={'class':'story'}))

執(zhí)行輸出:

[<p class="story">Once upon a time there were three little sisters; and their names were <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>; and they lived at the bottom of a well.</p>, <p class="story">...</p>] View Code

?

2.5、text

值可以是:字符,列表,True,正則

print(soup.find_all(text='Elsie')) print(soup.find_all('a',text='Elsie'))

執(zhí)行輸出:

['Elsie'] [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>] View Code

?

2.6、limit參數(shù)

如果文檔樹很大那么搜索會很慢.如果我們不需要全部結果,可以使用 limit 參數(shù)限制返回結果的數(shù)量.效果與SQL中的limit關鍵字類似,當搜索到的結果數(shù)量達到 limit 的限制時,就停止搜索返回結果

print(soup.find_all('a',limit=2))

?執(zhí)行輸出:

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>] View Code

?

2.7、recursive

調用tag的 find_all() 方法時,Beautiful Soup會檢索當前tag的所有子孫節(jié)點,如果只想搜索tag的直接子節(jié)點,可以使用參數(shù) recursive=False?

print(soup.html.find_all('a')) print(soup.html.find_all('a',recursive=False))

執(zhí)行輸出:

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] [] View Code

?

備注

像調用 find_all() 一樣調用tag find_all() 幾乎是Beautiful Soup中最常用的搜索方法,所以我們定義了它的簡寫方法. BeautifulSoup 對象和 tag 對象可以被當作一個方法來使用, 這個方法的執(zhí)行結果與調用這個對象的 find_all() 方法相同,下面兩行代碼是等價的:soup.find_all("a") soup("a")這兩行代碼也是等價的:soup.title.find_all(text=True) soup.title(text=True)

?

3、find()

語法

find( name , attrs , recursive , text , **kwargs )

find_all() 方法將返回文檔中符合條件的所有tag,盡管有時候我們只想得到一個結果.比如文檔中只有一個<body>標簽,那么使用 find_all() 方法來查找<body>標簽就不太合適, 使用 find_all 方法并設置 limit=1 參數(shù)不如直接使用 find() 方法.下面兩行代碼是等價的:

from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml') print(soup.find_all('title', limit=1)) # soup.find_all('title', limit=1) print(soup.find('title')) # <title>The Dormouse's story</title>

?

唯一的區(qū)別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果.
find_all() 方法沒有找到目標是返回空列表, find() 方法找不到目標時,返回 None .

print(soup.find("nosuchtag")) # None

?

soup.head.title 是 tag的名字 方法的簡寫.這個簡寫的原理就是多次調用當前tag的 find() 方法:

print(soup.head.title) # <title>The Dormouse's story</title> print(soup.find("head").find("title")) # <title>The Dormouse's story</title>

?

4、其他方法

見官網: https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-parents-find-parent

?

5、css選擇器

我們在寫 CSS 時,標簽名不加任何修飾,類名前加點,id名前加 #,在這里我們也可以利用類似的方法來篩選元素,用到的方法是?soup.select(),返回類型是?list

1. 通過標簽名查找

from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml') print(soup.select("title")) # [<title>The Dormouse's story</title>] print(soup.select("b")) # [<b class="boldest" id="bbb">The Dormouse's story</b>]

?

2.?通過類名查找

print(soup.select(".sister")) ''' [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]'''

?

3.?通過 id 名查找

print(soup.select("#link1")) # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

?

4.?組合查找

組合查找即和寫 class 文件時,標簽名與類名、id名進行的組合原理是一樣的,例如查找 p 標簽中,id 等于 link1的內容,二者需要用空格分開

print(soup.select("p #link2"))#[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

?

直接子標簽查找

print(soup.select("p > #link2")) # [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

?

5. 屬性查找

查找時還可以加入屬性元素,屬性需要用中括號括起來,注意屬性和標簽屬于同一節(jié)點,所以中間不能加空格,否則會無法匹配到。

print(soup.select("a[href='http://example.com/tillie']")) #[<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

?

select 方法返回的結果都是列表形式,可以遍歷形式輸出,然后用 get_text()?方法來獲取它的內容:

for title in soup.select('a'):print (title.get_text())''' Elsie Lacie Tillie '''

?

5. 修改文檔樹

修改文檔樹

?

二、Xpath模塊

xpath簡介

XPath在Python的爬蟲學習中,起著舉足輕重的地位,對比正則表達式 re兩者可以完成同樣的工作,實現(xiàn)的功能也差不多,但XPath明顯比re具有優(yōu)勢,在網頁分析上使re退居二線。

XPath介紹

是什么? 全稱為XML Path Language?一種小型的查詢語言
說道XPath是門語言,不得不說它所具備的優(yōu)點:?

  • 可在XML中查找信息?
  • 支持HTML的查找?
  • 通過元素和屬性進行導航

python開發(fā)使用XPath條件:?由于XPath屬于lxml庫模塊,所以首先要安裝庫lxml。

XPath的簡單調用方法:

from lxml import etreeselector=etree.HTML(源碼) #將源碼轉化為能被XPath匹配的格式 selector.xpath(表達式) #返回為一列表

?

Xpath語法?

查詢

html_doc = """ <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><div class="d1"><div class="d2"><p class="story"><a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" id="link3">Tillie</a></p></div><div><p id="p1">ALex is dsb</p><p id="p2">Egon too</p></div> </div><div class="d3"><a href="http://www.baidu.com">baidu</a><p>百度</p> </div></body> </html> """from lxml import etree selector=etree.HTML(html_doc) # 將源碼轉化為能被XPath匹配的格式

?

1. 選取節(jié)點

語法:

nodename 選取nodename節(jié)點的所有子節(jié)點 xpath(‘//div’) 選取了所有div節(jié)點 / 從根節(jié)點選取 xpath(‘/div’) 從根節(jié)點上選取div節(jié)點 // 選取所有的當前節(jié)點,不考慮他們的位置 xpath(‘//div’) 選取所有的div節(jié)點 . 選取當前節(jié)點 xpath(‘./div’) 選取當前節(jié)點下的div節(jié)點 .. 選取當前節(jié)點的父節(jié)點 xpath(‘..’) 回到上一個節(jié)點 @ 選取屬性 xpath(’//@calss’) 選取所有的class屬性

示例代碼:

ret=selector.xpath("//div") ret=selector.xpath("/div") ret=selector.xpath("./div") ret=selector.xpath("//p[@id='p1']") ret=selector.xpath("//div[@class='d1']/div/p[@class='story']")

?

2. 謂語

語法:

表達式 結果 xpath(‘/body/div[1]’) 選取body下的第一個div節(jié)點 xpath(‘/body/div[last()]’) 選取body下最后一個div節(jié)點 xpath(‘/body/div[last()-1]’) 選取body下倒數(shù)第二個div節(jié)點 xpath(‘/body/div[positon()<3]’) 選取body下前兩個div節(jié)點 xpath(‘/body/div[@class]’) 選取body下帶有class屬性的div節(jié)點 xpath(‘/body/div[@class=”main”]’) 選取body下class屬性為main的div節(jié)點 xpath(‘/body/div[price>35.00]’) 選取body下price元素值大于35的div節(jié)點

示例代碼:

from lxml import etree selector=etree.HTML(html_doc) # 將源碼轉化為能被XPath匹配的格式 ret=selector.xpath("//p[@class='story']//a[2]") # [<Element a at 0x20d9a188c88>] ret=selector.xpath("//p[@class='story']//a[last()]") # [<Element a at 0x27a64818d88>]

返回結果是一個Element對象

?

3. 通配符

Xpath通過通配符來選取未知的XML元素

表達式 結果 xpath(’/div/*’) 選取div下的所有子節(jié)點 xpath(‘/div[@*]’) 選取所有帶屬性的div節(jié)點

示例代碼:

ret=selector.xpath("//p[@class='story']/*") # [<Element a at 0x22c8461bcc8>, <Element a at 0x22c8461bc88>, <Element a at 0x22c8461bd88>] ret=selector.xpath("//p[@class='story']/a[@class]") # [<Element a at 0x1ebe370bc88>, <Element a at 0x1ebe370bd88>]

?

4. 取多個路徑

使用“|”運算符可以選取多個路徑

表達式 結果 xpath(‘//div|//table’) 選取所有的div和table節(jié)點

示例代碼:

ret=selector.xpath("//p[@class='story']/a[@class]|//div[@class='d3']") print(ret) # [<Element a at 0x1d509bd9cc8>, <Element a at 0x1d509bd9c88>, <Element div at 0x1d509bd9d88>]

?

5.?Xpath軸

軸可以定義相對于當前節(jié)點的節(jié)點集

軸名稱 表達式 描述 ancestor xpath(‘./ancestor::*’) 選取當前節(jié)點的所有先輩節(jié)點(父、祖父) ancestor-or-self xpath(‘./ancestor-or-self::*’) 選取當前節(jié)點的所有先輩節(jié)點以及節(jié)點本身 attribute xpath(‘./attribute::*’) 選取當前節(jié)點的所有屬性 child xpath(‘./child::*’) 返回當前節(jié)點的所有子節(jié)點 descendant xpath(‘./descendant::*’) 返回當前節(jié)點的所有后代節(jié)點(子節(jié)點、孫節(jié)點) following xpath(‘./following::*’) 選取文檔中當前節(jié)點結束標簽后的所有節(jié)點 following-sibing xpath(‘./following-sibing::*’) 選取當前節(jié)點之后的兄弟節(jié)點 parent xpath(‘./parent::*’) 選取當前節(jié)點的父節(jié)點 preceding xpath(‘./preceding::*’) 選取文檔中當前節(jié)點開始標簽前的所有節(jié)點preceding-sibling xpath(‘./preceding-sibling::*’) 選取當前節(jié)點之前的兄弟節(jié)點 self xpath(‘./self::*’) 選取當前節(jié)點

?

6. 功能函數(shù)

使用功能函數(shù)能夠更好的進行模糊搜索

函數(shù) 用法 解釋 starts-with xpath(‘//div[starts-with(@id,”ma”)]‘) 選取id值以ma開頭的div節(jié)點 contains xpath(‘//div[contains(@id,”ma”)]‘) 選取id值包含ma的div節(jié)點 and xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘) 選取id值包含ma和in的div節(jié)點 text() xpath(‘//div[contains(text(),”ma”)]‘) 選取節(jié)點文本包含ma的div節(jié)點

?

舉例1:

# 選取p標簽class屬性為story,在它下面的a標簽id屬性為link1的文本信息 ret=selector.xpath("//p[@class='story']/a[@id='link1']/text()") print(ret) # ['Elsie']

?

舉例2:

# 選取p標簽class屬性為story,在它下面的a標簽id屬性以link開頭的文本信息 ret=selector.xpath("//p[@class='story']/a[starts-with(@id,'link')]/text()") print(ret) # ['Elsie', 'Lacie', 'Tillie']

?

舉例3:

# 選取p標簽class屬性為story,在它下面的a標簽id屬性包含k的文本信息 ret=selector.xpath("//p[@class='story']/a[contains(@id,'k')]/text()") print(ret) # ['Elsie', 'Lacie', 'Tillie']

?

舉例4:

# 選取p標簽class屬性為story,在它下面的a標簽class屬性包含is的文本信息 ret=selector.xpath("//p[@class='story']/a[contains(@class,'is')]/text()") print(ret) # ['Elsie', 'Lacie']

?

舉例5:

# 選取p標簽class屬性為story,在它下面的a標簽文本信息包含ie的文本信息 ret=selector.xpath("//p[@class='story']/a[contains(text(),'ie')]/text()") print(ret) # ['Elsie', 'Lacie', 'Tillie']

?

Element對象

from lxml.etree import _Element for obj in ret:print(obj)print(type(obj)) # from lxml.etree import _Element''' Element對象class xml.etree.ElementTree.Element(tag, attrib={}, **extra)tag:string,元素代表的數(shù)據(jù)種類。text:string,元素的內容。tail:string,元素的尾形。attrib:dictionary,元素的屬性字典。#針對屬性的操作clear():清空元素的后代、屬性、text和tail也設置為None。get(key, default=None):獲取key對應的屬性值,如該屬性不存在則返回default值。items():根據(jù)屬性字典返回一個列表,列表元素為(key, value)。keys():返回包含所有元素屬性鍵的列表。set(key, value):設置新的屬性鍵與值。#針對后代的操作append(subelement):添加直系子元素。extend(subelements):增加一串元素對象作為子元素。#python2.7新特性find(match):尋找第一個匹配子元素,匹配對象可以為tag或path。findall(match):尋找所有匹配子元素,匹配對象可以為tag或path。findtext(match):尋找第一個匹配子元素,返回其text值。匹配對象可以為tag或path。insert(index, element):在指定位置插入子元素。iter(tag=None):生成遍歷當前元素所有后代或者給定tag的后代的迭代器。#python2.7新特性iterfind(match):根據(jù)tag或path查找所有的后代。itertext():遍歷所有后代并返回text值。remove(subelement):刪除子元素。'''

?

本文參考鏈接:

https://www.cnblogs.com/yuanchenqi/articles/9487175.html

?

應用案例:安居客

打開安居客二手房鏈接:

https://beijing.anjuke.com/sale/?from=navigation

需要爬取 標題

務必使用谷歌瀏覽器打開,右鍵檢查。找到對應的標簽,右鍵copy-->copy Xpath

那么就能得到

//*[@id="leftContent"]/ul/li[1]/div/div[1]/a

?

接下來寫代碼:

import requests from lxml import etree# 訪問二手房網頁 res= requests.get("https://beijing.anjuke.com/sale/?from=navigation")selector=etree.HTML(res.content) # 將html源碼轉化為能被XPath匹配的格式# 匹配第一個條信息的標題 ret=selector.xpath('//*[@id="houselist-mod-new"]/li[1]/div[2]/div[1]/a/text()') print(ret)

執(zhí)行輸出:

['\n 鳳凰城二期,高層兩居室,看房有鑰匙隨時,臨國際村,金星園瀾石']

?

怎么樣,是不是很方便。注意:它能幫你快速生成 XPath表達式。它并不是萬能的,在某些動態(tài)加載的網頁中,可能不適用!

上面的結果只有一條,如果有多條呢?需要自己修改規(guī)則了!

?

XPath Helper

XPath Helper可以支持在網頁點擊元素生成xpath,整個抓取使用了xpath、正則表達式、消息中間件、多線程調度框架的chrome插件。

這里我已經安裝好了

安裝完成之后,在頁面右上角,有一個圖標

?

點擊一下,它會彈出一個黑框。將剛才的XPath規(guī)則復制到左邊,右邊會立即顯示結果

如果被選中,頁面會有黃色標記!

?

作業(yè):

爬取鏈家二手房信息,爬取3頁即可!

注意:使用XPath完成!

?

分解步驟

打開鏈接二手房鏈接:

https://bj.lianjia.com/ershoufang/

獲取標題

獲取第一條信息的標題

選擇所有信息中的標題部分

使用python代碼實現(xiàn)

import requests from lxml import etree# 訪問二手房網頁 res= requests.get("https://bj.lianjia.com/ershoufang/")selector=etree.HTML(res.content) # 將html源碼轉化為能被XPath匹配的格式# 匹配所有的標題 ret=selector.xpath('//*[@id="leftContent"]/ul/li[*]//div/div/a/text()') print(ret)

執(zhí)行輸出:

['南向兩居室 電梯房 簡單裝修 適合居住', '惠民家園 ', ...]

那么所有的標題,就獲取完成了!

?

轉載于:https://www.cnblogs.com/xiao987334176/p/9720562.html

總結

以上是生活随笔為你收集整理的python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

成人免费视频免费观看 | 99久久这里有精品 | 色婷婷久久 | 国内视频在线 | 中文字幕在线精品 | 三级av网站| 在线播放一区二区三区 | 国产成人精品一区二区在线观看 | 亚洲午夜精品一区二区三区电影院 | 人人爽人人搞 | 成人影片免费 | 六月色丁 | 国产一区二区不卡在线 | 999抗病毒口服液 | 日日日日日 | 亚洲 欧洲av | 综合国产在线观看 | 免费观看视频的网站 | 区一区二在线 | 视频一区二区免费 | 久久99久久精品国产 | 99精品在线直播 | 精品国产伦一区二区三区观看说明 | 中文字幕av免费观看 | 久久不射电影网 | 欧美精品一区二区在线播放 | 综合av在线 | 一区二区三区四区不卡 | 国产精品中文久久久久久久 | 日韩高清无线码2023 | 97在线超碰 | 婷婷伊人综合亚洲综合网 | 色就色,综合激情 | 中文字幕日韩一区二区三区不卡 | 午夜av激情 | 激情综合亚洲 | 精品国产乱码久久久久久1区二区 | 六月色丁 | 精品国产自 | 久久免视频 | 久久久久久国产精品亚洲78 | 国产女教师精品久久av | 日日干天天 | 国产精品大片免费观看 | 一区三区视频在线观看 | 91看国产| 亚洲免费av在线播放 | 免费在线观看av网址 | 在线观看免费成人av | 91看片网址 | 欧洲成人av | 久久国产精品一区二区三区 | 日韩精品一区二区免费 | 日韩av二区 | 91成人国产 | 久久久久久电影 | 日韩久久精品一区二区三区 | 亚洲极色 | av免费电影在线 | 一区二区成人国产精品 | 狠狠躁夜夜躁人人爽超碰91 | 成人一级在线观看 | 97超级碰碰碰碰久久久久 | 在线观看视频黄 | 永久av免费在线观看 | 91重口视频 | 国产色视频网站2 | 色综合久久精品 | 91看片淫黄大片在线播放 | 九草在线视频 | av超碰在线观看 | 国产一区二三区好的 | 欧美成人猛片 | 日韩在线观看一区二区三区 | 国产精品久久久久久久久久ktv | 久章草在线观看 | a级国产乱理论片在线观看 伊人宗合网 | 国产日韩欧美视频在线观看 | 99热这里只有精品国产首页 | 久久与婷婷 | 成人一区二区三区中文字幕 | 五月在线 | 国产一卡二卡四卡国 | 久久久精品久久 | 开心色婷婷 | 欧美做受高潮 | 最近中文字幕免费观看 | 亚洲精品在线视频 | 在线电影av| 久久久久久久久久电影 | 精品视频99 | 中文字幕在线观看视频一区二区三区 | 天天干夜夜想 | 精品国产乱码久久久久 | 亚洲黄色免费电影 | 亚洲黄色在线 | 日韩在线免费不卡 | 日韩在线首页 | 成年人黄色大片在线 | 亚洲精品欧美成人 | 中文网丁香综合网 | 手机看片福利 | 欧美巨大 | 成人久久免费 | 91在线精品视频 | 欧美污网站 | 国产精品小视频网站 | 99久久精品免费看国产免费软件 | 波多野结衣电影久久 | 天堂av在线网站 | 午夜婷婷综合 | 国产资源中文字幕 | 久久一区91| 久草a视频 | 成 人 黄 色 视频免费播放 | 日本黄色免费大片 | 在线中文字幕视频 | 久久久国产一区 | 狂野欧美激情性xxxx | 蜜臀av性久久久久蜜臀av | 日本中文字幕高清 | 国产色视频123区 | 久久久伦理 | 亚洲精品午夜久久久久久久久久久 | 毛片基地黄久久久久久天堂 | 91精品国产92久久久久 | 亚洲精品国偷拍自产在线观看蜜桃 | 超碰国产人人 | 97国产一区二区 | 97视频在线观看网址 | 天天搞天天| 久久网址 | 亚洲黄色免费观看 | 久久久久久综合网天天 | 亚洲乱码国产乱码精品天美传媒 | 国产一区二区高清不卡 | 成人免费大片黄在线播放 | 国产视频日韩视频欧美视频 | 欧美一区日韩一区 | 亚洲一区不卡视频 | 成人亚洲精品久久久久 | 国产精品理论片 | 午夜精品久久久久久中宇69 | 亚洲综合在线播放 | 欧美一区二区视频97 | 国产精品久久久久久av | 天天爱天天草 | 亚洲日本成人网 | 手机在线看片日韩 | 欧美 日韩 久久 | 国产精品久久久久久久久久ktv | 91在线公开视频 | 午夜免费福利视频 | 国产成人亚洲在线观看 | 黄色精品视频 | av 一区 二区 久久 | 国产经典 欧美精品 | 免费观看性生交 | 久久综合九色综合欧美就去吻 | 欧美伦理一区 | 国产美女精品在线 | 麻豆视频免费在线播放 | 国产精品剧情 | 精品黄色在线观看 | 六月激情| 成人91免费视频 | 激情电影在线观看 | 在线观看www视频 | 久久激情视频 久久 | 黄色片免费在线 | 性色av免费在线观看 | 激情大尺度视频 | 美女网站免费福利视频 | av在线在线| 操高跟美女 | 免费三及片 | 亚洲国产精品一区二区久久hs | 亚洲片在线 | 免费观看高清 | 91影视成人 | 日韩精品一区二区三区免费观看视频 | 麻豆国产电影 | 97品白浆高清久久久久久 | 丁香亚洲| 久久99国产精品二区护士 | 制服丝袜成人在线 | 日本爱爱片 | 国产精品成人在线观看 | 黄www在线观看 | 五月天综合网站 | 日韩在线观看视频免费 | 国产资源站 | 五月激情姐姐 | 欧美日韩色婷婷 | 国产九九九九九 | 91成版人在线观看入口 | av解说在线 | av资源免费看 | 中文字幕欧美日韩va免费视频 | 国产一级片直播 | 欧美a性| 日韩视频免费观看高清 | 丰满少妇在线观看资源站 | 日韩欧美国产免费播放 | 一区二区三区精品在线 | 91综合久久一区二区 | 久久狠狠干 | 日韩乱码在线 | 久久久91精品国产 | 欧美一级黄大片 | www色综合 | 亚洲一级二级三级 | 免费午夜视频在线观看 | 99福利片 | 亚洲人成网站精品片在线观看 | 久久视频免费在线观看 | 国产精品久久 | 黄色在线免费观看网址 | 久久久久久久久久影院 | 久久免费试看 | 韩国av免费观看 | 国产视频一区二区在线观看 | 五月天激情电影 | 亚洲成a人片77777kkkk1在线观看 | 婷婷色在线视频 | 久久毛片网 | 国产精品手机看片 | 国产剧情一区 | 亚洲精品美女久久17c | 国产精品99久久久久久小说 | 九九视频这里只有精品 | 在线观看一级视频 | 久久九九久久精品 | 免费观看一级成人毛片 | 99视频在线精品免费观看2 | 五月天国产精品 | 亚洲视频,欧洲视频 | 免费黄色特级片 | 日韩va亚洲va欧美va久久 | 亚洲精品一区二区在线观看 | 欧美日韩国产页 | 国产精品久久在线观看 | 五月婷在线视频 | 成x99人av在线www | 91人人射| 欧美最猛性xxxxx亚洲精品 | 草久久影院 | 国产99久久精品一区二区永久免费 | 人人澡澡人人 | 性色大片在线观看 | 亚洲精品国产精品国产 | a极黄色片 | 蜜桃av人人夜夜澡人人爽 | 狠狠狠狠狠操 | 天堂av网在线 | 天天色天天干天天色 | 少妇自拍av| 欧美日韩p片 | 久久精品在线视频 | 久久艹欧美 | 国产理论一区二区三区 | 久久综合射 | 国产毛片久久 | 亚洲国产精品成人女人久久 | 国产精品日韩在线观看 | 久久久午夜精品理论片中文字幕 | 91大片成人网| 国产精在线 | 字幕网资源站中文字幕 | 国产伦理久久 | 国产亚洲片 | 99国产在线 | 香蕉视频导航 | 视频成人永久免费视频 | 激情av在线资源 | 手机av看片 | 国产91对白在线播 | 五月婷婷免费 | 99热9 | 日韩激情精品 | 久久综合干 | 欧美日韩国产在线一区 | 日韩中字在线观看 | 九九九热精品免费视频观看网站 | 国产黄色片一级 | 99国产成+人+综合+亚洲 欧美 | 香蕉影视 | 久久蜜臀一区二区三区av | 草久草久 | 97在线观 | 国产精品久久久区三区天天噜 | 天天添夜夜操 | 怡红院成人在线 | 久热只有精品 | 国产小视频免费在线观看 | 韩国三级在线一区 | 成人av电影网址 | 伊人天天狠天天添日日拍 | 国产91对白在线 | 中文字幕在线播放日韩 | 国产精品12345 | 色婷婷综合久久久久 | 精品麻豆入口免费 | 欧美日韩免费观看一区=区三区 | 日韩特级毛片 | 激情小说网站亚洲综合网 | 91免费版成人 | 国产精品无 | 99 精品 在线 | 九九精品久久久 | 丁香花在线观看视频在线 | 久久99亚洲热视 | 国产精品欧美久久久久无广告 | 国产精品视频99 | 91插插视频 | 91大神精品视频在线观看 | 视频福利在线观看 | 精品福利视频在线观看 | 国产小视频免费在线网址 | 91免费在线视频 | 欧美国产日韩一区二区三区 | 亚洲日本va午夜在线电影 | 日本久久综合视频 | 成年人在线视频观看 | 日韩中文在线播放 | 国产精品99久久久久久久久久久久 | 91精品国产一区 | 在线视频黄 | 日本精品中文字幕在线观看 | 五月天亚洲综合 | 狠狠插狠狠干 | 91网站免费观看 | 欧美日韩精品网站 | 国产精品资源在线观看 | 99精彩视频 | v片在线看 | 久久久www成人免费精品 | 欧美精品九九99久久 | 亚洲精品在线观看不卡 | 日日夜夜爱| 久久深夜福利免费观看 | 亚洲尺码电影av久久 | av一级久久| 国产九九九精品视频 | 日韩视频a | 午夜狠狠干 | 久久久久在线观看 | 国产精品99精品久久免费 | 国产精品99久久免费观看 | 99久久精品久久亚洲精品 | 色老板在线 | 免费在线观看毛片网站 | 中文字幕在线观看av | 婷婷丁香av | 久久国产精品久久精品国产演员表 | 青草视频在线 | 天天操天天舔天天爽 | 亚洲va欧美va | 久久久伦理 | 国产亚洲人成网站在线观看 | 精品国产aⅴ一区二区三区 在线直播av | 中文字幕有码在线 | 在线观看一区二区精品 | 亚洲综合视频在线 | 精品一区 在线 | 伊人色综合网 | 亚洲精品www久久久久久 | 99久久婷婷国产综合亚洲 | 很黄很黄的网站免费的 | 看国产黄色片 | 91av免费观看 | 99热9 | 又粗又长又大又爽又黄少妇毛片 | 日日噜噜噜噜夜夜爽亚洲精品 | 免费看十八岁美女 | 美腿丝袜一区二区三区 | 久久九九视频 | 91看片麻豆 | 国产糖心vlog在线观看 | 成人在线观看免费 | 99色在线| 国产精品资源 | 国产自在线观看 | 久久久久 免费视频 | 福利一区在线视频 | 久99久中文字幕在线 | 麻豆视频免费在线播放 | 日韩一区二区免费播放 | 久久免费看av | www.久久色| 国产成人一区二区三区 | 九九久久久久久久久激情 | 黄色小说视频网站 | 成人黄色片免费 | 国际精品久久 | 国产中文字幕视频在线观看 | 欧美日韩国产精品一区二区三区 | 综合影视 | 久久爽久久爽久久av东京爽 | 国产精品久久艹 | 久久精品一区二区三区中文字幕 | 91九色国产视频 | 在线国产小视频 | 色资源网在线观看 | 九九亚洲视频 | 国产91aaa| 色综合久久久久综合体桃花网 | 精品日韩在线一区 | 国产在线观看不卡 | 国产一区免费在线观看 | 国产亚洲精品精品精品 | 亚洲天天综合 | 精品国产自 | 亚洲精欧美一区二区精品 | a级国产乱理伦片在线观看 亚洲3级 | 美女黄濒 | www视频在线播放 | 在线观看91精品国产网站 | 高清不卡毛片 | 色妞久久福利网 | 最新午夜电影 | 九九一级片 | 亚洲一级黄色 | 婷婷色九月 | 亚洲五月六月 | 久草在线精品观看 | 国内精品久久久久久久久久清纯 | a在线播放| 天天干夜夜爽 | 欧美日韩亚洲一 | 97天堂| 丁香九月婷婷 | 日韩精品在线免费播放 | 久久精品导航 | 欧美精品第一 | 综合网天天射 | 亚洲一级黄色av | 探花视频免费观看 | 成人性生交视频 | www.夜夜爽 | japanesexxxxfreehd乱熟 | 日韩免费一区二区在线观看 | 免费污片| 亚洲丝袜一区 | 999久久久精品视频 日韩高清www | 国产亚洲精品久久久久久 | 91网在线观看 | 97精品超碰一区二区三区 | 日本不卡一区二区 | 激情五月播播久久久精品 | 国产精品毛片久久蜜 | 天天天操天天天干 | 日本中文字幕在线免费观看 | 久久久影院一区二区三区 | 最新真实国产在线视频 | 91亚洲精品国偷拍 | 久99热| 国内精品久久久 | 亚洲国产日韩一区 | 911香蕉 | 国产精品自产拍在线观看网站 | 成人app在线免费观看 | 天天操综合网 | 奇人奇案qvod | 国产视频欧美视频 | 国产九九热 | 在线观看视频免费播放 | 欧美亚洲成人xxx | 欧美亚洲成人免费 | 婷婷成人亚洲综合国产xv88 | www.com操| 玖玖视频 | 丁香九月婷婷 | 天海翼一区二区三区免费 | 在线播放 日韩专区 | 天天玩夜夜操 | 国产精品岛国久久久久久久久红粉 | 日韩综合在线观看 | 久久免费成人网 | 日日婷婷夜日日天干 | 特级毛片在线 | 国产99免费视频 | 成人免费视频播放 | 国产白浆视频 | 日韩免费av在线 | 韩国av一区二区三区 | 午夜在线免费观看视频 | 欧美不卡在线 | 精品国产一区二区三区久久久 | 成人一级片免费看 | 久久天天综合网 | 欧美国产大片 | 久青草影院 | 99riav1国产精品视频 | 国产精品黄色在线观看 | 国产精品久久99精品毛片三a | 国产精品久久久久9999 | 在线观看视频国产 | 91av电影在线观看 | 国产精品1区2区3区在线观看 | 亚洲综合色播 | 韩国av三级 | 欧美国产精品久久久久久免费 | 久久成| 久香蕉 | 蜜臀av.com| 国产精品久久嫩一区二区免费 | 日日干 天天干 | www..com黄色片 | 免费看在线看www777 | 精品国产视频在线观看 | 一区二区三区免费网站 | 成年在线观看 | 丝袜美腿亚洲综合 | av综合站 | 国产精品都在这里 | 久久精品美女 | 国产精品久久片 | 久久国产精品免费一区二区三区 | www国产亚洲精品 | 成人久久免费视频 | 天天色天天射综合网 | 丁香 婷婷 激情 | 一区二区视频在线免费观看 | 亚a在线 | 欧美日本不卡 | 国产美女免费看 | 9免费视频| 九九免费观看全部免费视频 | 高清av影院| 香蕉97视频观看在线观看 | 国产99黄| 九九综合久久 | 天天干天天拍天天操 | 成人久久久久久久久 | 中文字幕二区 | 一区二区三区国产欧美 | 久草在线欧美 | 91pony九色丨交换 | 奇米影视四色8888 | 免费 在线 中文 日本 | 美腿丝袜一区二区三区 | 99热精品视 | 亚洲精品乱码久久久久久久久久 | 91亚洲精品久久久久图片蜜桃 | 久久久久久久久久久网站 | 日韩大片在线免费观看 | 久草在线免费资源 | 亚洲精品a区 | 欧美精彩视频在线观看 | 77国产精品 | 日本成人中文字幕在线观看 | 国产精品18久久久久久久 | 亚洲国产资源 | 久久成人国产精品免费软件 | 亚洲欧美国内爽妇网 | 国产精品丝袜久久久久久久不卡 | 欧美另类色图 | 国产精品2018 | 三上悠亚一区二区在线观看 | 成人免费观看视频大全 | 国产永久免费 | 麻豆视频入口 | 日韩精选在线观看 | 成人中文字幕+乱码+中文字幕 | 中文字幕免费观看全部电影 | 中文字幕欧美三区 | 亚洲天堂网站视频 | 中文字幕视频一区二区 | 成人h视频在线播放 | 黄色在线看网站 | 日韩av一区在线观看 | 久久久久久国产精品免费 | 国产精品久久久久久久久久新婚 | 天天爱天天射天天干天天 | av在线看片 | av超碰免费在线 | 日韩电影久久 | 国产日韩欧美在线观看视频 | 婷婷九九 | 久久国产精品99国产精 | 91在线一区 | av在线超碰| 欧美一级片在线 | 一区二区视频免费在线观看 | 久久这里精品视频 | 日韩欧美一区二区三区在线 | 免费日韩在线 | 色天天中文 | 成年人看片| 精品国产乱码久久 | 午夜骚影 | 中文字幕在线观看视频一区二区三区 | 九色91在线视频 | 911久久香蕉国产线看观看 | 国产大陆亚洲精品国产 | 中文av日韩 | 日韩在线观看视频一区二区三区 | 精品欧美一区二区三区久久久 | 日韩精品免费在线观看视频 | 亚洲国产成人在线播放 | 高清精品视频 | 久久久国产精品一区二区中文 | 黄网站免费大全入口 | 国产精品午夜av | www.婷婷com| 免费视频久久久久久久 | 亚洲最新合集 | 午夜精品视频在线 | 亚洲电影久久 | 丝袜美女视频网站 | 久久久五月天 | 日韩色一区二区三区 | 亚洲免费精品视频 | av福利在线播放 | 成人在线免费看 | 国产91成人| 久久伊人婷婷 | 中文字幕日韩一区二区三区不卡 | 欧美视频一区二 | 色九九影院 | 涩涩网站在线观看 | 99中文字幕视频 | 国产一区二区三区视频在线 | 天天噜天天色 | 亚洲午夜av电影 | 在线看小早川怜子av | 狠狠干中文字幕 | 超碰在线国产 | 久久久久久久18 | 天天操偷偷干 | 色狠狠狠 | av噜噜噜在线播放 | 久久精品国产第一区二区三区 | 狠狠的日日 | 成人一区二区三区在线 | 91精品在线免费观看 | 亚洲资源在线网 | 久久久久亚洲最大xxxx | 91亚洲精品乱码久久久久久蜜桃 | 国产黄免费在线观看 | 国产色拍拍拍拍在线精品 | 久久er99热精品一区二区 | 久久国产91 | www.com.日本一级 | 欧美日韩视频在线 | 国产黑丝一区二区三区 | 亚洲日本在线视频观看 | av中文天堂 | 欧美视频在线二区 | 免费av福利 | 免费视频在线观看网站 | 黄色a在线 | 日韩综合一区二区 | 国语精品视频 | 夜夜干天天操 | 国产成人不卡 | 在线免费观看视频 | 国产综合香蕉五月婷在线 | 亚洲人成人天堂h久久 | 综合av在线 | 久草精品资源 | 亚洲国产理论片 | 五月婷av| 成人影片在线免费观看 | 免费日韩av片 | 国产精品一区二区av麻豆 | 中文字幕人成人 | 亚洲精品在线资源 | 麻豆视频免费在线播放 | 人人涩 | 国产综合91 | 日韩美女av在线 | 国产一级不卡毛片 | 国产在线观看二区 | 亚洲国产成人精品久久 | 国产精品日韩在线播放 | 亚洲黄色小说网 | 国产精品欧美久久久久三级 | 91人人干 | 91黄色在线看 | 2019中文最近的2019中文在线 | 中文字幕在线播放视频 | 在线v片| 在线观看91 | 亚洲精品视频大全 | 欧美日韩国产一区二区三区在线观看 | 欧美与欧洲交xxxx免费观看 | 中文av资源站 | 日韩精品一区二区三区水蜜桃 | 1000部国产精品成人观看 | 色婷婷狠狠干 | 亚洲成av人影院 | 九九视频免费观看视频精品 | 999成人精品 | 精品国产乱码久久久久久1区二区 | 九九热在线观看 | 伊人www22综合色 | 久久新| 九九热免费在线视频 | 国产在线视频一区二区 | 91视频免费看网站 | 四虎成人免费观看 | 永久免费的啪啪网站免费观看浪潮 | 国产亚洲精品久久久久久电影 | 又黄又爽的免费高潮视频 | 丁香5月婷婷久久 | 友田真希x88av | 亚洲丝袜一区 | 国产一区视频在线 | 国内外成人在线视频 | 三上悠亚在线免费 | 伊人亚洲综合网 | 成人国产精品一区 | 天天色天天 | 不卡国产视频 | 五月天色网站 | 国产精品视频免费在线观看 | 91精品国产乱码久久桃 | 国产xxxx | 手机看片午夜 | 在线免费av电影 | 一区二区精品视频 | 天天射天天拍 | 国产午夜免费视频 | 色欧美日韩| 国产精品毛片久久蜜 | 97操操| 免费三及片 | 成人黄色在线视频 | 中文字幕有码在线观看 | 日韩午夜视频在线观看 | 91亚洲精品在线观看 | 丰满少妇高潮在线观看 | 亚州精品一二三区 | 色婷婷五 | a黄色片在线观看 | 色99久久| 国产午夜精品一区二区三区在线观看 | 超碰国产在线观看 | 国产一区二区在线免费播放 | 超碰成人免费电影 | 亚洲人人网 | 一区二区中文字幕在线播放 | 欧洲亚洲国产视频 | 日韩精选在线观看 | 中文字幕高清av | 久久久香蕉视频 | 久久avav| 一区二区三区在线免费观看视频 | 国产做aⅴ在线视频播放 | 久久精品99久久 | 黄污在线看 | 97超碰站 | 精品视频在线播放 | 丝袜美腿在线播放 | 色综合久 | 日韩在线小视频 | 天天操狠狠操夜夜操 | 日韩网站免费观看 | 奇米导航 | 国产最新在线 | 国产精品久久久久久69 | 久久在线一区 | 91精品国产自产老师啪 | 国产精品综合av一区二区国产馆 | 国产在线观看h | 极品国产91在线网站 | 中文字幕色在线视频 | 欧美国产日韩中文 | 色妞久久福利网 | 韩日av在线 | 久久综合久久综合这里只有精品 | 91视频中文字幕 | 一性一交视频 | 天天搞天天干天天色 | 久久激情片 | 成人h动漫精品一区二 | 一区二区电影网 | 国产91影视 | 91女神的呻吟细腰翘臀美女 | 国产在线中文 | 国产在线精品一区二区 | 午夜av免费看 | 国产成人精品久久亚洲高清不卡 | 97av视频| ,久久福利影视 | 欧美成人精品三级在线观看播放 | 国产麻豆视频在线观看 | 人人爽人人爽人人片av | 欧美日韩高清 | 精品国产亚洲日本 | 欧美三级在线播放 | 日韩高清 一区 | www毛片com| 99精品久久久久久久久久综合 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 69国产盗摄一区二区三区五区 | 久久久精品欧美 | 91av手机在线 | 手机成人av| 日本精品久久久久中文字幕 | 久久久久久国产一区二区三区 | 婷婷五情天综123 | av久久在线| 国产午夜精品在线 | 午夜99| 69欧美视频| 911久久| av在线之家电影网站 | 天天草天天草 | 久久视频国产精品免费视频在线 | 国产成人精品一区二区三区在线 | 操一草| 黄色在线免费观看网址 | 国产最新在线视频 | 91精品夜夜 | 97碰碰精品嫩模在线播放 | 91在线在线观看 | 日本资源中文字幕在线 | 一区二区三区在线不卡 | 久久久久久毛片精品免费不卡 | 精品一区二区三区香蕉蜜桃 | www.久久成人| 91在线一区 | 亚洲高清在线观看视频 | 日韩高清免费无专码区 | 欧美 激情 国产 91 在线 | 中文字幕中文字幕在线一区 | 超碰97人人射妻 | av天天澡天天爽天天av | 婷婷六月在线 | 国产欧美高清 | 麻豆视频在线播放 | 国产成人一级电影 | 久久五月情影视 | 国产一区欧美一区 | 亚洲中字幕 | 天天色天天射天天操 | 精品国产伦一区二区三区观看体验 | 一二三区视频在线 | 深夜视频久久 | 亚洲精品欧美专区 | 久久视频在线视频 | 最近中文字幕完整视频高清1 | 九九99 | 国产精品自产拍在线观看网站 | 成年人在线免费看视频 | www.夜夜爱 | 久久理伦片 | 99热在线观看免费 | 免费视频久久久久 | 国内精品久久久久久久影视麻豆 | 久久黄页 | 亚洲天天摸日日摸天天欢 | jizzjizzjizz亚洲| 婷婷在线视频 | 国产日本三级 | 国产一区二区久久精品 | 97天天综合网 | 天天干,狠狠干 | 日韩av偷拍| 欧美成人精品欧美一级乱黄 | 在线免费高清 | 久久久午夜精品理论片中文字幕 | 欧美日韩成人一区 | 久久一本综合 | 美女av免费看 | 日韩视频一二三区 | 丁香花在线视频观看免费 | av国产在线观看 | 成人在线视频论坛 | 看v片 | 日韩在线观看视频在线 | 亚洲精品午夜视频 | 日韩在线视频观看免费 | 人九九精品 | 五月婷婷在线视频观看 | 波多野结衣电影久久 | 国产亚洲免费观看 | 一区二区三区在线观看免费视频 | 国产不卡网站 | 精品国产一二三四区 | 久久精品久久久精品美女 | 国产黄在线看 | 香蕉久久久久久av成人 | wwwwww国产| 亚洲免费激情 | 高清av免费看 | 久久久精品网站 | 精品99免费视频 | 精品久久久久久久久久久久 | 国产精品美女免费看 | 久久久免费精品 | 永久免费av在线播放 | 欧美一级片免费播放 | 在线观看av免费 | 欧美一区二区三区在线观看 | 久久久久 免费视频 | 国产精品成久久久久 | 日韩精品首页 | 在线亚洲欧美视频 | 在线观看网站你懂的 | 在线视频日韩精品 | 国产又粗又猛又黄 | 久草网在线观看 | 国产在线理论片 | 中文字幕一二三区 | 99精品久久只有精品 | 色综合a | 麻豆果冻剧传媒在线播放 | 成人香蕉视频 | 日韩成人免费在线 | 国产欧美综合在线观看 | 特片网久久 | 黄色录像av| 午夜久久久久久久久久影院 | 日韩中文免费视频 | 91福利社区在线观看 | 精品欧美一区二区在线观看 | 天天操天天摸天天干 | 日韩欧美99| 夜夜躁狠狠躁日日躁视频黑人 | 日韩精品在线播放 | 久久天天拍 | www91在线观看 | 国产免费久久久久 | 中文字幕一区二 | 国产一区二区三精品久久久无广告 | 国产呻吟在线 | 特级黄色视频毛片 | 久久精品视频在线观看免费 | 成人免费观看视频网站 | 国产激情电影综合在线看 | 丁香六月激情 | 色欧美成人精品a∨在线观看 | 黄色一级免费网站 | 久久伊人爱 | 亚洲 欧美 另类人妖 | 99看视频在线观看 | 99久久99久国产黄毛片 | 国内99视频 | 在线观看一区 | 九九久久视频 | 91免费网站在线观看 | 日韩动态视频 | 毛片网站在线 | 伊在线视频| 不卡国产在线 | 91一区二区三区在线观看 | 一本一道久久a久久精品 | 69亚洲视频 | 91在线看网站| 国产 亚洲 欧美 在线 | 欧美日韩高清一区 | 欧美午夜精品久久久久久孕妇 | 欧美日韩一区久久 | 韩国一区二区在线观看 | 久久久久久久网 | 国产黄网在线 | 亚洲精品资源在线 | www.99在线观看 | 99高清视频有精品视频 | 国产精品中文字幕在线 | 国产在线精品播放 | 四虎成人精品永久免费av | 久久午夜网 | 涩涩爱夜夜爱 | 天天爱天天舔 | 国产精品久久久久一区 | 久久综合中文字幕 | 色婷婷综合久久久中文字幕 | 久久综合中文色婷婷 | 日本韩国在线不卡 | 亚洲视频久久久久 | 久久99精品波多结衣一区 | 天天爽夜夜爽精品视频婷婷 | 欧美激情综合五月色丁香 | av导航福利 | 在线色视频小说 | 99免费在线观看视频 | 日韩免费看视频 | 黄色一集片 | 久久久av电影 | 亚洲狠狠 | 69av视频在线观看 | 久久精品国产一区二区三区 | 91在线影视 | 日韩精品 在线视频 | 日韩女同av | 久久久久久久久久久久久久av | 午夜精品久久久久久久99热影院 | 亚洲天堂网在线视频 | 久久不卡国产精品一区二区 | 国产五月婷 | 日韩大片在线 | 久久韩国免费视频 | 久精品视频在线 |