Python解析ライブラリの使用
解析ライブラリの使用 XPath Xpath を使用 Beautiful Soup メソッドセレクタ
Pyquery 初期化 基本CSSセレクタ ノード を検索する を巡る取得情報
XPath
Xpathの使用
XMLドキュメントで情報を検索する言語: XPathの概要は、簡潔で明瞭な道路力選択式を提供する. XPath共通ルール: 式#シキ#
説明
nodename
このノードのすべてのサブノードを選択
/
現在のノードから直接サブノードを選択
//
現在のノードから子孫ノードを選択
.
現在のノードを選択
…
現在のノードの親を選択
@
属性の選択
e.g:title[@lang=‘eng’]で、titleという名前で属性langの値がengのノードをすべて選択します.4.インスタンスすべてのノード:
8.多属性照合ノード軸選択
Beautiful Soup基本用法:
prettify()メソッドでは奥解析の文字列を標準のインデント形式で出力でき、Beautiful Soupで自動的にフォーマットを訂正できるノードセレクタはノードの名前を直接呼び出すことでノード要素を選択しstring属性を呼び出すことでノード内のテキストを得ることができる.複数のノードがある場合、最初に一致するノード のみが選択される.抽出情報(1)取得名:name:soup.title.name(2)取得属性:attrs:ノード選択後呼び出し、soup.p.attrs、soup.p.attrs[‘name’](3)取得内容:string:soup.p.string ネスト選択 関連選択1.サブノードと子孫ノードprint(soup.p.conents)#戻りタイプリストcontentsで得られた結果は直接サブノードのリストchildrenであり、戻り結果はジェネレータタイプdescendantsであり、すべての子孫ノードを取得2.親ノードと祖父ノードparent:ノードを選択した直接親ノードparentsのみ:すべての祖父ノードを取得3.兄弟ノードsoup.a.next_Sibling次の兄弟要素を取得soup.a.previous_Sibling取得前の兄弟要素list(enumerate(soup.a.next_siblings)取得後の兄弟ノードlist(enumerate(soup.a.previous_siblings)取得前の兄弟ノード メソッドセレクタ CSSセレクタ
Pyquery
初期化文字列初期化 URL初期化 ファイル初期化
基本CSSセレクタ
ノードの検索
find()は条件を満たすすべてのノードを選択し、結果タイプの場合PyQueryタイプ、検索範囲はノードのすべての子孫ノード、children()メソッドは子ノードのみ、親ノード:parent()、祖父ノード:parents()、兄弟ノード:sibings()
遍歴する
情報の取得取得属性 テキスト を取得
結果が複数のノードである場合、html()メソッドは最初のノードの内部HTMLテキストを返し、text()はすべてのノード内部の純テキスト呼び出しitems()メソッドを返した後、1つのジェネレータが得られ、遍歴するとliノードオブジェクトが1つずつ得られ、タイプもPyQueryタイプである.ノード操作
結果:activeというclassを削除してまた追加します
attract()は、最初のパラメータのみを送信します.この属性値を取得し、2番目の修正属性値text()とhtml()を入力してパラメータを割り当てます.
その他のノード操作はjQueryの使用法と一致する擬似クラスセレクタ
XPath
Xpathの使用
XMLドキュメントで情報を検索する言語:
説明
nodename
このノードのすべてのサブノードを選択
/
現在のノードから直接サブノードを選択
//
現在のノードから子孫ノードを選択
.
現在のノードを選択
…
現在のノードの親を選択
@
属性の選択
e.g:title[@lang=‘eng’]で、titleという名前で属性langの値がengのノードをすべて選択します.4.インスタンス
from lxml import etree
html=etree.parse('./test.html',etree.HTMLParser())#
result=etree.tostring(html)# HTML , bytes
print(result.decode('utf-8'))# str
```Javascript
result=html.xpath('//*')#
result=html.xpath('//li/a')#
result=html.xpath('//a[@href="link4.html/parent::*/@class')# a , class
result=html.xpath('//li[@class="item-0"]')#
7.
```javascript
from lxml import etree
html=etree.parse('./test.html',etree.HTMLParser())
result=html.xpath('//li[@class="item-0"]/a/text()')#
result=html.xpath('//li[@class="item-0"]//text()')# ,
print(result)
8.多属性照合
html=etree.HTML(text)
result=html.xpath('//li[1]/a/text()')# li
result=html.xpath('//li[last()]/a/text()')#
result=html.xpath('//li[position()<3]/a/text()')# 3
result=html.xpath('//li[last()-2]/a/text()')# li
print(result)
html=etree.HTML(text)
result=html.xpath('//li[1]/ancestor::div')# div
result=html.xpath('//li[1]/attribute::*')#
result=html.xpath('//li[1]/child::a[@href="link1.html"]')#
result=html.xpath('//li[1]/descendant::span')# , span
result=html.xpath('//li[1]/following::*[2]')# ,
result=html.xpath('//li[1]/following-sibling::*')#
Beautiful Soup
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')#
print(soup.prettify())
print(soup.title.string)
prettify()メソッドでは奥解析の文字列を標準のインデント形式で出力でき、Beautiful Soupで自動的にフォーマットを訂正できる
print(soup.head.title)
print(type(soup.head.title))
print(soup.head.title.string)
The Dormouse's story
The Dormouse's story
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
print(soup.select('.panel .panel-heading'))
print(soup.select('ul li'))
print(soup.select('#list-2 .element'))
for li in soup.select('li'):
print('Get Text:',li.get_text())
print(type(soup.select('ul')[0]))
Pyquery
初期化
from pyquery import PyQuery as pq
doc=pq(html)
print(doc('li'))#
doc=pq(url='https://cuiqingcai.com')#URL
print(doc('title'))
doc=pq(filename='demo.html')
print(doc('li'))
基本CSSセレクタ
doc=pq(html)
print(doc('#container .list li'))
print(type(doc('#container .list li')))
ノードの検索
doc=pq(html)
items=doc('.list')
lis=items.find('li')
lis=item.children('.active')
container=items.parent()# PyQuery
parents=item.parents()#
find()は条件を満たすすべてのノードを選択し、結果タイプの場合PyQueryタイプ、検索範囲はノードのすべての子孫ノード、children()メソッドは子ノードのみ、親ノード:parent()、祖父ノード:parents()、兄弟ノード:sibings()
遍歴する
#
li=doc('.item-0.active')
print(li)
print(str(li))
#
lis=doc('li').items()
for li in lis:
print(li ,type(li))
情報の取得
from pyquery import as pq
doc=pq(html)
a=doc('.item-0.active a')
print(a,type(a))
print(a.attr('href'))# ,
#
a=doc('a')
for item in a.items():
print(item.attr('href'))
from pyquery import PyQuery as pq
doc=pq(html)
a=doc('.item-0.active a')
print(a)
print(a.text())#
print(li.html())# HTML
結果が複数のノードである場合、html()メソッドは最初のノードの内部HTMLテキストを返し、text()はすべてのノード内部の純テキスト呼び出しitems()メソッドを返した後、1つのジェネレータが得られ、遍歴するとliノードオブジェクトが1つずつ得られ、タイプもPyQueryタイプである.
from pyquery import PyQuery as pq
doc=pq(html)
li=doc('.item-0.active')
print(li)
li.remove_class('active')
print(li)
li.add_class('active')
print(li)
結果:activeというclassを削除してまた追加します
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
attract()は、最初のパラメータのみを送信します.この属性値を取得し、2番目の修正属性値text()とhtml()を入力してパラメータを割り当てます.
from pyquery import PyQuery as pq
doc=pq(html)
wrap=doc('.wrap')
wrap.find('p').remove()# p ,
その他のノード操作はjQueryの使用法と一致する