誰かがミケランジェロに「どうやって『ダヴィデ像』のような傑作を作ったのですか?」と尋ねると、ミケランジェロはこう答えました。「簡単です。採石場に行って、巨大な大理石の塊を見たのです。
同様に、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 ) ページ全体のタグのリストを取得し、リストを反復処理して対応するタグのコンテンツを取得します
これら 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)
最初の行の
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)
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())
—
—
—
(3)
— “$15.00”(4)
— s(2)
—(1)
正規表現と BeautifulSoup上記の 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
この記事の著作権は著者に帰属します。原文へのリンクは記事ページのわかりやすい位置にあります。そうでない場合、当社は法的責任を追及する権利を留保します。
この記事が役に立ったと思われる場合は、著者に少額の [スポンサーシップ] を行うことができます。