ホームページ > ウェブフロントエンド > htmlチュートリアル > Python による Web スクレイピングの詳細な HTML parsing_html/css_WEB-ITnose

Python による Web スクレイピングの詳細な HTML parsing_html/css_WEB-ITnose

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-21 08:55:01
オリジナル
1317 人が閲覧しました

誰かがミケランジェロに「どうやって『ダヴィデ像』のような傑作を作ったのですか?」と尋ねると、ミケランジェロはこう答えました。「簡単です。採石場に行って、巨大な大理石の塊を見たのです。

同様に、Web ページをクロールするときは、不要なものを削除し、必要な情報を抽出する必要があります。 . ですが、この技術は非常に複雑です。この記事では HTML 解析技術を紹介します。

前回の記事 (Python による Web スクレイピング - 最初の Web スクレイピングの例) では、こちらの BeutifulSoup ライブラリと事前に連絡しました。属性

を通じてタグを見つけます。 ほとんどすべての Web サイトには CSS が含まれており、CSS は、

< など、さまざまな HTML 要素に依存してさまざまなタグを付けるのに非常に役立ちます。 ;span class="green">

Web サイトを見てみましょう - http://www.pythonscraping .com/pages/warandpeace.html、中には記事があり、話された言葉は赤色のフォントで、話者は緑色のフォントで表示されます。ソース コード スニペットの 1 つを選択します:

"天よ!何という凶悪な攻撃だ!」と王子は/span>と答えたが、この歓迎には少しも動揺しなかった。

使用できます 前の記事で Web ページ全体を取得する BeautifulSoup オブジェクトを作成するために使用したプログラム:

from urllib.requestimport urlopenfrom bs4import BeautifulSouphtml = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")bsObj = BeautifulSoup(html)
ログイン後にコピー

BeautifulSoup オブジェクトの findAll メソッドを使用してリストを抽出します指定された要件の

nameList = bsObj.findAll("span", {"class":"green"})for namein nameList:    print(name.get_text())
ログイン後にコピー

上記のコード証明書を配置します:

from urllib.requestimport urlopenfrom bs4import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")bsObj = BeautifulSoup(html, "html.parser")nameList = bsObj.findAll("span", {"class": "green"})for namein nameList:    print(name.get_text())
ログイン後にコピー

実行結果:

アンナ

パブロヴナ・シェーラー

皇后マリア

……

上記のコードを説明してください:

bsObj.findAll( tagName、tagAttributes ) ページ全体のタグのリストを取得し、リストを反復処理して対応するタグのコンテンツを取得します

find() および findAll()

これら 2 つのメソッドそれらの宣言は非常に似ており、次のようになります:

findAll(tag,attributs,recursive,text,limit,keywords)find(tag,attributs,recursive,text,keywords)

タグパラメータこれは前に見たとおりです。文字列または文字列のリストを渡すことができます: .findAll({"h1","h2","h3","h4","h5","h6"})

attributes パラメータの受け渡し 属性とタグに一致する辞書。例: .findAll("span", {"class":"green", "class":"red"})

再帰パラメータが使用されます再帰を設定するかどうかを設定します

キーワード パラメーターを使用すると、次のような特別な属性を含めることができます。

from urllib.requestimport urlopenfrom bs4import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")bsObj = BeautifulSoup(html, "html.parser")allText = bsObj.findAll(id="text")#也可以换为:allText = bsObj.findAll("",{"id":"text"})print(allText[0].get_text())
ログイン後にコピー

子タグを検索したい場合は、

from urllib.requestimport urlopenfrom bs4import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")for childin bsObj.find("table", {"id": "giftList"}).children:    print(child)
ログイン後にコピー

最初の行の コンテンツを削除したい場合は、next_siblings

from urllib.requestimport urlopenfrom bs4import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")for siblingin bsObj.find("table", {"id":"giftList"}).tr.next_siblings:    print(sibling)
ログイン後にコピー
<🎜 を使用できます。 >

親タグを見つけたい場合は、previous_siblings を使用できます:

from urllib.requestimport urlopenfrom bs4import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")print(bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
ログイン後にコピー

以下の HTML 構造は一目瞭然です

(3)

— “$15.00”

(4)

— s

(2)

(1)

正規表現と BeautifulSoup

Python の正規表現については、以下を参照してください。私の他の記事「Python の基礎 (9) - 正規表現」

上記の Web ページの例は次の構造になっていることに注意してください:

すべての img タグを抽出する必要がある場合、前のステートメントに従って、この問題を解決するために findAll("img") を検討できますが、一部の最新の Web サイトでは img が非表示になります。 . およびその他の不確実な要素がある場合にのみ、正規表現を使用して解決できます。

from urllib.requestimport urlopenfrom bs4import BeautifulSoupimport re html = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")images = bsObj.findAll("img", {"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})for imagein images:    print(image["src"])
ログイン後にコピー

実行結果は次のとおりです:

.. /img/gifts/img1.jpg

../img/gifts/img2.jpg

../img/gifts/img3.jpg

../img /gifts/img4.jpg

../img/gifts/img6.jpg

著者: 工学館 1 号

出典: http ://wuyudong.com/1842.html

この記事の著作権は著者に帰属します。原文へのリンクは記事ページのわかりやすい位置にあります。そうでない場合、当社は法的責任を追及する権利を留保します。

この記事が役に立ったと思われる場合は、著者に少額の [スポンサーシップ] を行うことができます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート