美しいスープのまとめ

前書き

Beautiful Soupは、HTMLコードを解析して情報を抽出するために使用できる強力な解析ライブラリですが、実行速度が遅くなります。xpathや通常の式のような対応する文法を学ぶ必要はなく、情報抽出を実現するために対応するメソッドを呼び出すだけで済みます。

一般的に使用される方法

find()
find_all()
get_text()
文字列
strings
stripped_strings
select

find()とfind_all()の違い

取得済みのhtmlコード文字がすでにあるとします。

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html,'lxml')
#这里选择lxml为解析器,需要先安装lxml这个库
date=soup.find('标签名')
date2=soup.find('标签名')

ここでの注意点は、BeautifSoupはhtmlコードのノードを介して検出されることです。find
()とfind_all()違いは、find()が最初のターゲットタグのデータを返し、find_all()がすべてを返すことです。

特別な属性を持つタグを抽出します

<div class='123'>456</div>
今書いたラベルがあるとしましょう。

date=soup.find_all('div',class_='123')

属性クラスはpythonキーワードと同じ名前であるため、区別するためにアンダースコアを使用する必要があります。
または、このように書くことができます。

date=soup.find_all('div',attrs={
    
    'class':'123'})

このラベルを抽出するなど、同時により多くの条件を満たす必要がある場合は、これ
<div class='123',classx='789'>456</div>
を行うことができます。

date=soup.find_all('div',attrs={
    
    'class':'123','classx':'789'})
或者;
date=soup.find_all('div',class_='123',classx='789')

ここで返されるのは、リストではなくelement.requestのオブジェクトですが、リストのように操作することもできます。

テキストと属性値を抽出します(文字列と文字列)

1.テキストを抽出します。これも例を取り上げます<div class='123'>456</div>
。456の情報を抽出し
ます。方法1。


#由于目前只有一个div标签并且没有或者只有一个子节点如果有多个div可以放进循环当中遍历。
date=soup.find_all('div',class_='123',classx='789')[0]
text=date.string
#这里返回一个字符串,提取当前一个节点下的文字

方法2;

date=soup.find_all('div',class_='123',classx='789')
#假设div的匹配结果唯一
texts=list(date.strings)
text=[]
for text_one in texts;
	text.append(text_one)
"""
这里需要注意的是strings可以提取改节点下所有文字 假设div节点下面有多个子节点,有多个则可以使用strings但是返回的是一个生成器可以遍历出来。
"""

より複雑な状況では、テキストを抽出するために、以下に複数のdivノードと複数の子ノード(dx)があります。
コードは次のとおりです;
(文字列を使用)

text=[]#存放文本信息
divs=soup.find_all('div',class_='123',classx='789')
for div in divs;
	dates=div.strings
	for date in dates;
		text.append(date)

(文字列を使用)

text=[]#存放文本信息
divs=soup.find_all('div',class_='123',classx='789')
for div in divs;
	dxs=div.find_all('dx')
	for dx in dxs;
		date=dx.string
		text.append(date)

属性値の抽出方法。たとえば<div class='123'>456</div>抽出の「123」の
コード次のとおりです。


date=soup.find_all('div',class_='123')
attribute=date['class']

返されるオブジェクトごとに、属性(htmlの属性)(BeautifulSoupの属性)があります。

ブランクを処理する

文字列を使用して、抽出された空白をリストに配置し、次のようにします
。stripped_stringsを使用します。

text=[]#存放文本信息
divs=soup.find_all('div',class_='123',classx='789')
for div in divs;
	#dates=div.strings
	dates=list(div.stripped_strings)
	
	for date in dates;
		text.append(date)

selectステートメントとcssステートメントを使用する

最初に説明するのは、select()はfind_all()に似ているということです。違いは、フィルター条件が異なることです。
スクリーニングなど; <div class='123'>456</div>(結果のみに一致すると仮定)

divs=soup.find_all('div',class_='123',classx='789')
divs=soup.select('div.123')

どちらも同じ効果がありますが、後者ではcss選択ステートメントを使用する必要があります。

cssselectステートメント

ここに写真の説明を挿入
ボックスの下線部分は選択文であり、レイアウトのために特定のノードをフィルタリングするために使用されます。
ステートメントを次の表に示します。
ここに写真の説明を挿入
ここに写真の説明を挿入

ここに写真の説明を挿入
より具体的なコンテンツは3wschool表示できますが、一般的にはそれほど多くは使用できません。基本的にはfind_all()を使用して達成でき、単純なWebページ情報のクロールと情報の抽出の効率はXpathよりも低くなります。通常のコンテンツを選択することをお勧めします。 html情報を抽出できるだけでなく、ほぼすべてのテキスト情報を抽出できます。興味のある方は、以前書いたブログでpythonクローラーシリーズをチェックしてみてください
(3)

おすすめ

転載: blog.csdn.net/FUTEROX/article/details/107464258