サイトを通過し、見つけたものを保存するための辞書を作成する Python Web クローラーを構築/拡張しました (誰かが興味を持っている場合は、私が使用したテンプレートを次に示します。これは非常に優れています: http://berrytutorials.blogspot.ca/2010/03 /simple-web-crawler-in-python-using.html )。ディクショナリにはこれよりも少し多くの情報がありますが、この質問の目的のために、単一の項目は基本的に の形式{page_url : html}
です。ここで、html はページの HTML 全体を文字列形式で表したものです。
クローラーは同じページを 2 回インデックスに登録しないように構築されていますが、テンプレートの作成者によって指摘されたように、URL パラメーターが異なるために同じページがクローラーによって異なるものとして認識されるという問題が発生しやすい可能性があります。たとえば、www.example.com/path?param=1 と www.example.com/path?param=2 は両方とも辞書に追加されます。これは、各ページのコンテンツがおそらく同じであっても、URL が技術的に異なるためです。 、またはほぼ同一です。これを修正するために私が考えることができる唯一の方法は、スクレイプが完了した後に辞書に保存されている大量の html 文字列を互いに比較し、一致するものがあるかどうかを確認することです-基本的には
if html_str_1 == html_str_2:
# eliminate one of them
可能なすべてのペアに対して。しかし明らかに、これは非常にリソースと時間を消費します。
これを達成するためのより良い方法を知っている人はいますか? また、いくつかの些細な文字が異なるだけで、ほぼ同一の html を検出できるようにしたいと考えています。私は Python を初めて使用するので、そこにあるさまざまなライブラリに精通しているわけではありません。たぶん、BeautifulSoupはこのようなことをすることができますか?
(注:私が示した例については、URLを分析する前にパラメーターを解析するだけでよいことを知っていますが、それはhtmlの重複の考えられる原因の1つにすぎず、すべてをカバーしたいと考えています。また、パラメーターが異なると、結果が大きく異なる可能性があります場合によってはページ)。