9

現在、HTML の形式がかなり不適切な Web サイトをスクレイピングしようとしています (多くの場合、終了タグが欠落している、クラスや ID が使用されていないため、必要な要素に直接移動するのが非常に難しいなど)。私はこれまで BeautifulSoup を使用してある程度の成功を収めてきましたが、ときどき (非常にまれですが)、BeautifulSoup が (たとえば) Firefox や Webkit とは少し異なる HTML ツリーを作成するページに出くわします。HTML のフォーマットがあいまいなままであるため、これは理解できますが、Firefox や Webkit が生成するのと同じ解析ツリーを取得できた場合、物事をより簡単に解析できるようになります。問題は通常、サイトが<b>タグを 2 回開き、BeautifulSoup が 2 番目の<b>タグを検出するとすぐに最初のタグを閉じ、Firefox と Webkit がそのタグをネストするようなものです。<b>タグ。

FirefoxまたはWebKitによって生成された解析ツリーを再現できるPython(または他の言語(私は絶望的になっています))のWebスクレイピングライブラリはありますか(または、あいまいな場合は少なくともBeautifulSoupより近くなります)。

4

10 に答える 10

10

BeautifulSoup次のツリー ビルダーとして使用し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>
于 2010-03-07T23:23:04.497 に答える
4

pyWebKitGTKは、何らかの助けになるかもしれないようです。

また、同じことをしなければならなかったが、javascriptの実行後にコンテンツのエクスポートを取得し、pyWebKitGTKを使用してPythonからjavascriptを実行する人物もここにあります。

チーズショップのpyWebkitGTK

pyQtでこれを行うこともできます。

于 2010-03-07T19:47:34.380 に答える
3

スクレイプを試しましたか?

Scrapyは、高速で高レベルの画面スクレイピングおよびWebクロールフレームワークであり、Webサイトをクロールし、ページから構造化データを抽出するために使用されます。データマイニングから監視、自動テストまで、幅広い目的に使用できます。

于 2010-03-28T10:56:28.823 に答える
2

SeleniumRCを使用して、選択したブラウザを駆動できます。

于 2010-03-07T18:18:06.477 に答える
2

Mechanizeモジュールを確認することをお勧めします。

http://wwwsearch.sourceforge.net/mechanize/

于 2010-03-07T19:14:11.003 に答える
1

まあ、WebKit はオープン ソースなので、任意の言語が受け入れられる場合は、(WebCore コンポーネントで) 独自のパーサーを使用できます。

于 2010-03-07T18:12:48.537 に答える
1

あなたはbeautifulsoupでlxmlパーサーを使用でき、xpathを使用してフォーマットされていないhtmlページのデータを見つけることができます.firebugを使用して要素を検査するときにxpathをコピーできます.

このチュートリアルをチェックできます: http://www.youtube.com/watch?v=PgWfF-Ut0zM

于 2012-07-12T00:08:34.423 に答える
1

Ian Bicking はかつて、驚くべきことに lxml の方が BeautifulSoup よりもスープの解析に優れている可能性があると書いています。個人的には試していません)

于 2010-03-07T19:22:25.887 に答える
0

ドキュメントから、ICantBelieveItsBeautifulSoupパーサーが必要なようです:

ICantBelieveItsBeautifulSoup も BeautifulSoup のサブクラスです。HTML 標準により厳密に準拠する HTML ヒューリスティックを備えていますが、現実の世界で HTML がどのように使用されているかは無視されます。たとえば、HTML で <B> タグをネストすることは有効ですが、現実の世界では、ネストされた <B> タグはほとんどの場合、作成者が最初の <B> タグを閉じるのを忘れたことを意味します。<B> タグを実際にネストしている人に遭遇した場合は、ICantBelieveItsBeautifulSoup を使用できます。

于 2010-04-19T05:14:03.610 に答える
0

これは私には良さそうです私は自分でそれを使用しています:リンク

于 2011-05-19T13:42:24.057 に答える