Python を使用した Web スクレイピング [終了]
-
25-09-2019 - |
質問
私は現在、かなり整形されていないHTMLを持つWebサイトをスクレイピングしようとしています(多くの場合、終了タグが欠落していたり、クラスやIDが使用されていないため、必要な要素に直接移動するのが非常に困難であるなど)。私はこれまで BeautifulSoup を使用してある程度の成功を収めてきましたが、時折 (非常にまれではありますが) BeautifulSoup が (たとえば) Firefox や Webkit とは少し異なる方法で HTML ツリーを作成するページに遭遇します。HTML の書式設定があいまいなままになっているため、これは理解できますが、Firefox や Webkit が生成するものと同じ解析ツリーを取得できれば、はるかに簡単に解析できるでしょう。問題は通常、サイトが開くようなものです。 <b>
タグを 2 回付け、BeautifulSoup が 2 番目のタグを認識したとき <b>
タグを使用すると、Firefox と Webkit が最初のタグをすぐに閉じます。 <b>
タグ。
Firefox または WebKit によって生成された解析ツリーを再現できる (または、少なくとも曖昧な場合は BeautifulSoup よりも近くなる) Python (または他の言語 (絶望的になってきました)) 用の Web スクレイピング ライブラリはありますか。
解決
使用 BeautifulSoup
の<のhref = "HTTPのツリービルダーのように://コード.google.com / P / html5lib /」のrel = "noreferrer"> html5lib
するます:
from html5lib import HTMLParser, treebuilders
parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
text = "a<b>b<b>c"
soup = parser.parse(text)
print soup.prettify()
出力:
<html>
<head>
</head>
<body>
a
<b>
b
<b>
c
</b>
</b>
</body>
</html>
他のヒント
pyWebKitGTK 何かの役に立つようです。
また、同じことをしなければならなかったが、JavaScript の実行後にコンテンツのエクスポートを取得した男がいます。 pyWebKitGTKを使用してPythonからJavaScriptを実行します.
pyWebkitGTK で チーズショップ.
あなたもすることができます pyQtでこれを行う.
あなたは scrapy を試してみましたか?
Scrapyは、高速高レベルの画面であります こするとWebフレームワークをクロール、 クロールウェブサイトや抽出するために使用 自分のページから構造化データ。それ の広い範囲で使用することができます 目的、データマイニングからの 監視と自動テストます。
あなたは SeleniumRC にしてお好みのブラウザを駆動することができます。
あなたはMechanizeのモジュールを見てみたいことがあります:
さて、WebKitがオープンソースであります
Ian Bicking はかつて、驚くべきことに、BeautifulSoup よりも lxml の方がスープの解析に優れている可能性があると書きました。 http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/ (参考までに述べただけで、個人的に試したわけではありません)
あなたはbeautifulsoupで、lxmlのパーサーを使用することができ、そしてあなたが放火犯を使用して要素を検査するときにXPathをコピーすることができ、フォーマットされていないHTMLページ内のデータを検索するためにXPathを使用します。
このチュートリアルをチェックアウトすることができます: http://www.youtube.com/watch?v=PgWfF-Ut0zMする
ドキュメントからは次のようです 信じられない美しいスープ パーサーはあなたが望むものです:
icantbelieveitsbeautifulsoupは、BeautifulSoupのサブクラスでもあります。HTML標準により密接に適合するHTMLヒューリスティックがありますが、HTMLが現実の世界でどのように使用されるかを無視しています。たとえば、それu003CB>はタグをネストするために有効なHTMLですが、現実の世界では、ネストされたu003CB>タグはほとんどの場合、著者が最初のu003CB>タグを閉じるのを忘れていたことを意味します。u003C/b>u003C/b>u003C/b>実際にu003CB>タグをネストする人に出くわした場合は、icantbelieveiveitsbeautifulsoupを使用できます。u003C/b>
この1つのルックスの良い:リンクする