xpath,全稱xml path language,即xml路徑語言,它是一門在xml文件中查詢資訊的語言,但是它同樣適用於html文件的搜尋
xpath常用規則
表示式 描述
nodename 選取此節點的所有子節點
/ 從當前節點擊取直接子節點
// 從當前節點擊取子孫節點
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性
例項引入
from lxml import etree //匯入lxml庫的etree模組
html=etree.html('html文件') //呼叫html類進行初始化
result=etree.tostring(html) //呼叫tostring()方法將修正後html**,型別是bytes型別
result=etree.xpath('xpath表示式')//可以使用xpath表示式可以將html文件過濾出你想要的html文件
result=etree.xpth('//li[@class="item-0"]/text()') //使用xpath中的text()方法可以獲取節點中的文字
result=etree.xpth('//li/a/@href') //使用@href可以獲取節點a中的href屬性的屬性值
當乙個節點中的屬性有兩個屬性值的時候可以使用contains()方法
result=etree.xpath('//li/[contains(@class,"li")]/a/text()')//contains()方法,第乙個引數傳入屬性名稱,第二個引數傳入屬性值,只要此屬性包含所傳的屬性值,就可以完成匹配
同時xpath還支援運算子操作
xpath提供了很多節點軸選擇方法,
ancestor::*,獲取所有的祖先節點
同時ancestor::,可以加限定條件,例如ancestor::div,表示只匹配div這個祖孫節點
attribute::,可以獲取所有的屬性值,同時也可以新增限定條件
child::,可以獲取所有直接子節點,同時可以新增限定條件
descendant::,可以獲取所有的子孫節點,同時可以新增限定條件
following::,可以獲取當前節點之後的所有節點,同時可以新增限定條件
following-sibling::可以獲取當前節點之後所有同級節點,可以新增限定條件。
beautiful soup的使用方法
beautiful soup就是乙個python的乙個html或xml的解析庫,可以用它來方便地從網頁中提取資料。
beautiful soup的基本用法:
form bs4 import beautifulsoup //匯入bs4庫中的beautifulsoup
soup=beautifulsoup('html文件',lxml) //將html文件作為第乙個引數傳入beautiful soup物件中,該物件的第二個引數為解析器的型別(這裡使用lxml),此時完成了beautifulsoup物件的初始化,然後將該物件例項化為soup,然後就可以使用soup的各個方法和屬性來解析這串html**了。這裡要注意的是如果你傳入的html文件不完全,在初始化beautifulsoup的時候可以將其自動補全
soup.prettify() //該方法可以把要解析的字串以標準的縮排格式輸出
soup.title//輸出html中的title節點的文字內容,它的型別為bs4.element.tag型別。
tag具有一些屬性,例如:
soup.title.string:可以得到節點的文字內容
soup.title.name:可以獲取節點的名稱
soup.title.sttrs:可以獲取節點所有的屬性,返回的結果是字典型別
soup.title.sttrs還有一種簡寫方式,soup.title['屬性名']
soup.title是tag型別,他還可以繼續呼叫它的子節點名字來獲取他的子節點屬性
soup.title.contenes:獲取title節點的直接子節點,返回的結果為列表型別
soup.title.children:等同於contenes,但是返回的結果型別為生成器型別
,這時候可以使用for迴圈來輸出相應的內容
soup.title.descendants:可以獲取所有的子孫節點,返回的型別也是生成器型別
soup.title.parent:可以獲取該節點的父節點
soup.title.parents:可以獲取該節點的祖先節點
soup.title.previous.sibling:獲取節點的上乙個兄弟元素
soup.title.next_siblings:獲取節點後面所有的兄弟節點
soup.title.previous_siblings:獲取節點前面所有的兄弟節點
同時tag還有一些方法:例如:
find_all():給傳入一些屬性或文字,就可以查詢所有符合條件的元素
除了find_all()方法,還是find()方法,不過後者返回是第乙個匹配元素,而前者是返回所有匹配的元素組成的列表
除了這兩個,還有其他查詢方法:
find_parents()和find_parent():前者返回所有祖先節點,後者返回直接父節點
find_next_siblings()和find_previous_sibling():前者返回前面所有的兄弟節點,後者返回前面第乙個兄弟節點。
pyquery
如果喜歡使用css選擇器,推薦使用pyquery解析庫
from pyquery import pyquery
doc=pyquery('html**') //這裡的html**可以傳入字串,也可以傳入url,或本地文件
html=doc('css選擇器') //返回的型別為pyquery型別
pyquery型別有很多內建方法:
find
()方法,find
()會將符合條件的子孫節點返回,型別為pyquery型別
children
()方法,將符合條件的子節點返回,型別為pyquery型別
parent
()方法,直接返回目標節點的直接父節點,型別為pyquery型別
parents
(),直接返回目標節點祖先節點,型別為pyquery型別
siblings
(),直接返回目標節點的兄弟節點,型別為pyquery型別
items
(),將pyquery型別變為生成器型別,然後可以使用for迴圈遍歷每個節點
attr
(),返回符合條件的屬性值。如果有多個元素,呼叫attr
()方法,只會得到第乙個節點的屬性
text
(),獲取節點內部的文字,如果有多個元素,則返回所有元素的文字內容,而不需要遍歷
addclass
(),新增節點的屬性值
removeclass
(),移除節點的屬性值
其中attr
()方法如果只傳遞乙個引數的屬性名,則是獲取這個屬性值;如果傳遞第二個引數,則可以修改屬性值。text
()和html
()方法如果不傳引數,則獲取節點內純文字和html文字;如果傳入引數,則賦值。
remove
(),移除節點中的文字內容。
python網路爬蟲之requests庫
import requests1 requests庫有兩個物件,request物件和response物件,下表是response物件的屬性 屬性說明 r.status code http請求的返回狀態,200表示連線成功,404表示失敗 r.text http響應內容的字串形式,即,url對應的頁面...
python網路爬蟲之requests庫 二
前面一篇在介紹request登入csdn 的時候,是採用的固定cookie的方式,也就是先通過抓包的方式得到cookie值,然後將cookie值加在傳送的資料報中傳送到伺服器進行認證。就好比獲取如下的資料。然後加入到header資訊中去 構造的cookie值 cookie 但是這樣的實現方式有乙個問...
爬蟲之xpath解析庫
xpath語法 1.常用規則 1.nodename 節點名定位 2.從當前節點擊取子孫節點 3.從當前節點擊取直接子節點 4.nodename attribute 根據屬性定位標籤 div class ui main 5.attributename 獲取屬性 6.text 獲取文字 2.屬性匹配兩種...