ライブラリを入手し、それを文字列に変換するには、HTMLページ要求を使用した後、さらに解析用HTMLページ形式の必要性は、有用な情報を抽出します。
解析し、HTMLおよびXMLを処理するためBeautifulSoup4ライブラリ、また、(短い後の両方を使用して)BS4ライブラリとして知られています。
1.コール
BS4ライブラリBSは、最も重要なカテゴリーで、オブジェクトの各インスタンスは、HTMLページに相当します
必要からインポートBSはBeautifulSoup BSを介してオブジェクトを作成し、クラスを導入しました()
コードは以下の通りであります:
インポート要求 から BS4 輸入BeautifulSoup R = requests.get(" https://www.baidu.com/ " ) r.encoding = " UTF-8 " スープ = BeautifulSoup(r.text) プリント(型(スープ))
結果:
2.一般的なプロパティ
BeautifulSoupは、オブジェクトを作成したタグ(タグ)HTML要素が<A>により製造することができる含ま各々が、木構造である。<B>の形で得られ
次のように共通の属性は次のとおりです。
頭:
HTMLページの<head>コンテンツ
タイトル:
htmlページのタイトル、<頭部>で、タグ<タイトル>
体:
HTMLページの<body>コンテンツ
P:
最初のページのHTMLの<P>コンテンツ
文字列:
HTMLコンテンツは、ラベルことをすべての文字列のWebページ上に表示
stripped_string:
すべての非空の文字列に表示されるHTMLウェブページ
そして、クロールBaiduのスローガンにしてみてください「百度、あなたは知っています。」
まず、我々は要求によって要求を確立し、あなたがソースを見ることによって、対応する部分を見つけることができます
次のとおりです。
だから、直接の<title>タグを呼び出すことにより、
コードは以下の通りであります:
インポート要求 から BS4 輸入BeautifulSoup R = requests.get(" https://www.baidu.com/ " ) r.encoding = " UTF-8 " スープ = BeautifulSoup(r.text) タイトル = soup.title プリント(タイトル)
結果は以下の通りであります:
3.ラベルの共通の属性
各タグBS4は、オブジェクトであるオブジェクトタグは、一例として米と呼ばれ、以下のように、一般的な構造は以下の通りであります:
<a class="mnav" href="http://www.nuomi.com">糯米する</a>
前記山括弧(<>)タグ名名で、ATTRSの他のアイテム、角括弧の間の文字列の内容
だから、一般的なプロパティは、ラベルの4種類に分かれています
名:
文字列名、ラベル
ATTRS:
辞書には、そのようなのhrefとして、元のページのタグのすべてのプロパティが含まれてい
contrnts:
コンテンツタグのすべてのサブタグのリスト
文字列:
文字列は、タグは、実際のテキスト内のテキスト、Webページが含まれています
そのためのHTMLタグが他のタグにネストすることができ、その文字列は、以下の原則を返さ
①いいえ、他のラベル場合は、タグ内の文字列の属性は、その内容を返します
②内部タグタグが、唯一つのラベル、文字列のリターンラベルの内容の最も内側がある場合
③複数の入れ子の内側のラベルには、noneに返送された場合
それでも百度に、例えば、最初に我々は次のようにコード<A>ラベルの文字列があるべき見つける必要があります。
インポート要求 から BS4 輸入BeautifulSoup R = requests.get(" https://www.baidu.com/ " ) r.encoding = " UTF-8 " スープ = BeautifulSoup(r.text) プリント(soup.a.string)
結果は以下の通りであります:
4.コールのfind()とfind_all()
HTML、同じ特別なラベルは、13 Baiduのホーム<A>の合計でとして、コンテンツの多くになりますが、値は最初の場所に返されます
この時間を通して見つけるとfind_all見つける必要があるので、これらの2つの方法は、状況に応じてトラバースHTML文書の内容に戻ります
次のように使用します。
BeautifulSoup.find_all(名前、attrsに、再帰的に、文字列、リミット)
名前:ラベル名の検索、文字列型に代表される名前
attrs:按照标签的属性来搜索,需要列出属性的名字和值,用json方法表示
recursive:设置查找层次,只查找当前标签的西一层时使用recursiv=false
string:按照关键字查找string属性内容,采用string=开始
limit:返回结果个数,默认全部
至于find()使用方法如find_all()相同,
BeautifulSoup.find_all(name,attrs,recursive,string)
区别在于find()只搜索第一个结果,find_all()返回所有结果。
我们尝试来通过find_all()来获取所有含有“百度”这一关键词的标签
首先需要调用re库,re是python的标准库可以采用compile()对字符串的检索
所以代码如下:
import requests import re from bs4 import BeautifulSoup r=requests.get("https://www.baidu.com/") r.encoding="utf-8" soup=BeautifulSoup(r.text) w=soup.find_all(string=re.compile("百度")) print(w)
结果如下: