Python網路爬蟲之解析庫

2021-08-28 00:19:05 字數 3849 閱讀 7201

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.屬性匹配兩種...