PythonのWebクローラー--BeautifulSoup4ライブラリを使用します

ライブラリを入手し、それを文字列に変換するには、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)

 

结果如下:

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/lyy135146/p/12005188.html