ホームページ >ウェブフロントエンド >htmlチュートリアル >Python による Web スクレイピングの詳細な HTML parsing_html/css_WEB-ITnose
誰かがミケランジェロに「どうやって『ダヴィデ像』のような傑作を作ったのですか?」と尋ねると、ミケランジェロはこう答えました。「簡単です。採石場に行って、巨大な大理石の塊を見たのです。
同様に、Web ページをクロールするときは、不要なものを削除し、必要な情報を抽出する必要があります。 . ですが、この技術は非常に複雑です。この記事では HTML 解析技術を紹介します。
前回の記事 (Python による Web スクレイピング - 最初の Web スクレイピングの例) では、こちらの BeutifulSoup ライブラリと事前に連絡しました。属性
を通じてタグを見つけます。 ほとんどすべての Web サイトには CSS が含まれており、CSS は、
< など、さまざまな HTML 要素に依存してさまざまなタグを付けるのに非常に役立ちます。 ;span class="green">54bdf357c58b8a65c66d7c19c8e4d1149c5d3de9ca4a90fe42a8652fb2148d8054bdf357c58b8a65c66d7c19c8e4d114
Web サイトを見てみましょう - http://www.pythonscraping .com/pages/warandpeace.html、中には記事があり、話された言葉は赤色のフォントで、話者は緑色のフォントで表示されます。ソース コード スニペットの 1 つを選択します:
"d2de8625371256bcbd362426296758c2天よ!何という凶悪な攻撃だ!54bdf357c58b8a65c66d7c19c8e4d114」と王子は6cf026ade1ef8c19c5cdd21403c78df5/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 ) ページ全体のタグのリストを取得し、リストを反復処理して対応するタグのコンテンツを取得します
これら 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)
最初の行の 1257f50b853adb1dbb0471653d8799d4
— aeec36c01e32da2b7f270288e091a375
(1)
正規表現と BeautifulSoup上記の Web ページの例は次の構造になっていることに注意してください:
f6be34c68ae89ba0c9619ad2ea82c275
すべての 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
この記事の著作権は著者に帰属します。原文へのリンクは記事ページのわかりやすい位置にあります。そうでない場合、当社は法的責任を追及する権利を留保します。
この記事が役に立ったと思われる場合は、著者に少額の [スポンサーシップ] を行うことができます。