一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

解析庫的使用-xpath-beautifulsoup-pyquery

 印度阿三17 2021-03-16

xpath(lxml 庫)

初始化etree對象

From lxml import etree

?

text = '''?

<div>?

<ul>?

<li class="item-0"><a href=”link1. html”>first item</a><li>?

<li class=” item-1”>< a href=”link2.html”> second item</a><li>?

<li class=” item-inactive” >< a href="link3.html”>third item</ a></h>?

<li class=” item-1 item-0”><a href="link4.html'’>fourth item</a><li>?

<li class =” item -0” id=“a”><a href=”link5.html”>fifth item</a>?

</ul>?

</div>

'’’

//加載字符串?dāng)?shù)據(jù)或者響應(yīng)到的數(shù)據(jù)

Html = etree.HTML(text)?

?

//可以看到該字符串最后一個li標(biāo)簽沒有閉合,采用toString()方法修復(fù)該標(biāo)簽

Html = Etree.toString(html). ? ? 結(jié)果是bytes類型

?

//加載本地文件中的數(shù)據(jù)進行解析

Html = etree.parse(filepath,etree.HTMLParser())

?

?

//獲取上述text所有節(jié)點

etree.xpath(“//*”)

?

//獲取第一個li節(jié)點

Etree.xpath(“/div/ul/li[1]”)

?

?

//獲取第一個li標(biāo)簽內(nèi)a標(biāo)簽的文本數(shù)據(jù)

Etree.xpath(//li[1][@class=“item-0”]/a[@href = “l(fā)ink1.html]/text())

?

?

//獲取li標(biāo)簽內(nèi)的子孫標(biāo)簽內(nèi)的文本數(shù)據(jù)

Html.xpath(//li[@class=“item-0]//text())

?

?

//獲取父節(jié)點和屬性

Html.xpath(//a[@href=“l(fā)ink2.html”]/../@class)

?

//有時某個節(jié)點的屬性有多個

Html.xpath(//li[contains(@class,”item1”)]/a/text())

?

?

//多屬性匹配

Html.xpath(//li[@class=“item-0” and? @id=“a”]/a/@href)

?

?

//節(jié)點軸選擇

ancester::選擇器——-獲取當(dāng)前選中標(biāo)簽的所有父標(biāo)簽

child::選擇器———獲取所有選中節(jié)點的直接子節(jié)點

Attribute::選擇器——-獲取所有選中節(jié)點的屬性

?

?

?

?

Beautiful Soup

?

beautiful soup 會自動將輸入的文檔轉(zhuǎn)為unicode 編碼格式,自動將輸出的文檔轉(zhuǎn)為utf8的格式,無需考慮編碼的問題,除非文檔自身沒有指定編碼,指定一個編碼格式就ok

(lxml解析器可以解析HTML,xml,解析的速度快,容錯能力強)

?

?

//導(dǎo)入BeautifulSoup,lxml

from bs4 import BeautifulSoup

Import lxml

?

?

?

//文本數(shù)據(jù)

html = “”“

<html> <head>< title>The Dormouse ’s story</title></head>?

<body>?

<p class=”title" name="dromouse”>< 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:///elsie” class= " sister” id=”linkl”>< ! - Elsie … >< la>,?

<a href=” http:///lacie ” class=”sister” id=”link2”> Lacie</a> and?

<a href="http:///tillie" class=”sister” id=”link3 ”>Tillie</a> ;?

and they lived at the bottom of a well .</p>?

<p class=”story”> ... <Ip>?

“”“

?

//初始化

From bs4 import BeautifulSoup

//此步驟會將html中不標(biāo)準(zhǔn)的標(biāo)簽,進行標(biāo)準(zhǔn)化輸出

Soup = BeautifulSoup(html,’lxml)

?

//將文檔以標(biāo)準(zhǔn)縮緊的格式輸出

print(soup.prettify())

?

?

//節(jié)點選擇,直接soup對象 節(jié)點名稱(標(biāo)簽名稱)就可以獲取該節(jié)點,獲取該節(jié)點的文本數(shù)據(jù)用string屬性

?

//獲取title節(jié)點

Soup.title

?

//獲取title節(jié)點內(nèi)的文本數(shù)據(jù)string屬性或者get_text()方法,兩者功能完全一致

Soup.title.string

?

//獲取p標(biāo)簽—-此時返回的是文檔中第一個p標(biāo)簽內(nèi)容(只會返回第一個選中的節(jié)點)

Soup.p

?

?

//調(diào)用name屬性返回節(jié)點的名稱(標(biāo)簽名稱)

Soup.title.name

?

//提取選中節(jié)點的屬性,attrs不攜帶屬性返回選中節(jié)點的所有屬性值,攜帶參數(shù)返回特定屬性值

Soup.p.attrs. ? //返回的是一個字典,如果一個屬性有多個值,那么該鍵所對應(yīng)的值是一個列表

Soup.p.attrs[“title”]

?

?

//嵌套選擇—每個返回結(jié)果都是bs4.element.tag類型

//選擇head標(biāo)簽內(nèi)的title標(biāo)簽

Soup.head.title

?

//contents屬性與children屬性,descendants

?

//content與children屬性一致,返回選中節(jié)點內(nèi)的所有直接子節(jié)點,contents返回的是列表,children返回的是生成器

Soup.body.contents soup.body.children

?

//descendants將返回選中節(jié)點的子孫節(jié)點,返回一個生成器

?

//獲取父節(jié)點

Soup.p.parent. ——直接父節(jié)點

soup.p.parents——返回所有的父節(jié)點和祖先節(jié)點。返回結(jié)果是一個生成器

?

//獲取兄弟節(jié)點

Soup.p.next_sibling —- soup.p.previous_sibling 返回的p節(jié)點的下一個和上一個兄弟節(jié)點

Soup.p.next_siblings ——soup.p.previous_siblings 返回的是所有的下兄弟節(jié)點和上兄弟節(jié)點

?

?

//方法選擇器

find_all(name,attrs,recursive,text,**kwargs) 返回需有符合條件的節(jié)點,返回結(jié)果是一個列表形式

?

//選擇節(jié)點名稱name

soup.find_all(“p”)

?

//選擇屬性,參數(shù)類型是字典形式

Soup.find_All(attrs={“id”:”aa”})

?

//text屬性可以傳入字符串或者正則表達(dá)式-返回節(jié)點中的文本符合該條件的文本列表

?

Soup.find_all(text=re.compile(“text”))

?

//find()方法與find_all接口一致,只不過find返回第一個匹配成功的節(jié)點,后者返回所有匹配的列表

?

?

//css選擇器

//select()方法返回所有符合css選擇器的節(jié)點列表—-也可以進行嵌套選擇

Soup.select(“#id .class tag”)

?

//獲取屬性

Soup.ul[“id”]? ———-soup.ul.attrs[“id”]

?

?

?

pyquery

?

From pyquery import PyQuery as pq

?

初始化:

Doc = PyQuery(參數(shù)):這里的參數(shù)可以是字符串,文件名(需要指定參數(shù)為filename),url(這里的url代表請求網(wǎng)頁的url,原理:先對該url發(fā)起請求,將獲得響應(yīng)對象的數(shù)據(jù)作為字符串參數(shù)參與初始化

?

例如:PyQuery(url) 相當(dāng)于 PyQuery(requests.get(url).text)

?

?

?

選擇器的使用:

例如:doc(’#contain .abs p’) 代表選擇id為contain下class為abs下的p標(biāo)簽。

?

?

?

查找子節(jié)點時需要用到find方法,傳入的參數(shù)時css選擇器(范圍時子孫節(jié)點)

例如 :ul = doc('.ul’)

li? = ul.find(“l(fā)i”)

代表先選中calss為ul的標(biāo)簽,在獲取其下的li標(biāo)簽

?

?

查找子節(jié)點的時候可以使用children方法(范圍是子節(jié)點)

?

例如:item.children() 返回item的所有子節(jié)點,

Item.children(“#a”) 返回item中id為a的子節(jié)點

?

?

?

查找父節(jié)點方法parent (只會返回直接點父節(jié)點,不會返回祖先節(jié)點)

例如:parent = item.parent() 返回item的父節(jié)點

?

?

查找祖先節(jié)點parents

例如:item.parents() 返回父節(jié)點和所有的祖先節(jié)點

item.parents(“#a”) 返回id為a的祖先節(jié)點

?

查找兄弟節(jié)點siblings方法

例如:item.siblings()返回item 的所有兄弟節(jié)點

item.siblings(“#a”) 返回item兄弟節(jié)點中id為a 的兄弟節(jié)點

遍歷:在調(diào)用相關(guān)方法后可能得到一個節(jié)點或多個節(jié)點,一個節(jié)點可以對其直接打印或轉(zhuǎn)為字符串,但多個節(jié)點需要用items()方法將其轉(zhuǎn)為生成器進行遍歷

?

?

獲取節(jié)點的屬性attr()方法

例如 item.attr(“href) 或者 item.attr.href 效果相同,當(dāng)item是一個節(jié)點時,必然返回相應(yīng)的屬性值,但是如果item為多個節(jié)點,則只會返回第一個節(jié)點的屬性,如果想要返回所有節(jié)點的屬性,可以采用上述的遍歷的方法

?

?

獲取節(jié)點的文本值和html文本

例如 item.text(), item.html() ,前者回返回當(dāng)前節(jié)點的所有文本數(shù)據(jù),在item為多個節(jié)點時同樣返回每個節(jié)點的文本數(shù)據(jù),每個節(jié)點之間的文本數(shù)據(jù)用空格分開,但html方法,在節(jié)點有一個的時候返回的是當(dāng)前節(jié)點內(nèi)的html文本,但在多個節(jié)點時只會返回第一個節(jié)點內(nèi)的html文本,所以在有多個節(jié)點時需要用到遍歷的方法

?

?

修改節(jié)點的屬性

例如:addClass 為當(dāng)前節(jié)點添加一個class,removeClass 為當(dāng)前節(jié)點移除class

Attr()方法傳入一個參數(shù)時獲取該屬性,傳入兩個參數(shù)時添加屬性,text()攜帶參數(shù)代表添加文本數(shù)據(jù)到當(dāng)前節(jié)點,html()攜帶參數(shù)代表添加html文本到當(dāng)前節(jié)點。

remove()方法移除選中的節(jié)點,

?

來源:https://www./content-4-893001.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    夜夜躁狠狠躁日日躁视频黑人| 在线观看免费视频你懂的| 欧美日韩乱一区二区三区| 国产日本欧美韩国在线| 日韩欧美第一页在线观看| 内射精子视频欧美一区二区| 亚洲中文字幕视频在线观看| 偷拍美女洗澡免费视频| 人妻巨大乳一二三区麻豆| 国产精品一区日韩欧美| 91偷拍与自偷拍精品| 国产户外勾引精品露出一区| 深夜日本福利在线观看| 中文字幕亚洲视频一区二区| 亚洲精品一二三区不卡| 国产精品内射婷婷一级二级| 国产肥妇一区二区熟女精品 | 欧美日韩一区二区综合| 日韩丝袜诱惑一区二区| 日本高清视频在线播放| 久久三级国外久久久三级| 激情丁香激情五月婷婷| 福利视频一区二区三区| 欧美国产极品一区二区| 久久精品国产在热亚洲| 手机在线不卡国产视频| 国产欧美亚洲精品自拍| 九九热精彩视频在线播放| 国产丝袜极品黑色高跟鞋| 国产一级特黄在线观看| 国产欧美韩日一区二区三区| 免费大片黄在线观看日本| 国产精品成人免费精品自在线观看| 国产精品午夜视频免费观看| 亚洲一级二级三级精品| 后入美臀少妇一区二区| 91天堂免费在线观看 | 久久99一本色道亚洲精品| 欧美午夜一区二区福利视频| 日木乱偷人妻中文字幕在线| 国产精品国产亚洲看不卡|