ホームページ  >  記事  >  ウェブフロントエンド  >  こんにちは、ベテランドライバー: Seed Crawler Planning_html/css_WEB-ITnose

こんにちは、ベテランドライバー: Seed Crawler Planning_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-21 08:56:031208ブラウズ

経験豊富な運転手の助けを借りて、私は柳里神社でさまざまな魔法の資源を見つける方法を学びました。そこで、このホイールを作りたいという願望が生まれました。このような家庭福祉サイトはいつまで続くか分からないので、大量のリソースを取り出してアーカイブするのは少々無駄です。

GitHub リポジトリ

https://github.com/Chion82/hello-old-driver

開発ノート

複数のバージョンと互換性を持たせるためクローラー スクリプトは、特定の Web サイトのクローリング ロジックをカスタマイズしませんが、Web サイトのすべてのページを再帰的に走査し、マグネット リンクのハッシュを定期的に照合して、サイト全体のマグネット リンク リソースをキャプチャする方法を使用します。マグネット リンクのハッシュ プロトコルは、ほとんどの場合 BTIH です。ハッシュ値は 40 ビットの 16 進文字列です。一致する規則は次のとおりです。

[^0-9a-fA-F]([0-9a-fA-F]{40})[^0-9a-fA-F]
順序として、ハッシュ文字列の長さが 40 バイトであること、およびその前後に 16 進数以外の一致を追加する必要があることに注意してください ([^0-9a-fA-F])。

これにより、Web サイトのページのソース コードにマグネット リンク以外の SHA-1 値が存在する可能性があります。たとえば、Liuli 神社のタグ属性には、それぞれの後に 40 バイトの長さのセクションがあります。ユーザーコメントのハッシュ値。現在の解決策は、HTML タグの属性コンテンツを無視することです a8093152e673feb7aba1828c43532094:

if (ignore_html_label): #为了增强扩展性,这类fix逻辑应该可控		result_text = re.sub(r'<.*?>', '', result_text)
各マグネット リンク リソースは次のようにする必要があります。検索を容易にするために、Web ページのタイトルがリソースのタイトルとして使用されます。一致ルールは次のとおりです。

<title>(.+?)</title>
テスト後。 、クロールの各ラウンド後に、キャプチャされたリソースの数が異なる可能性があることが判明しました。考えられる理由としては、Web サイトがアクセス頻度を制限しているか、接続が失敗して再試行された場合でも、ローカル ネットワークの品質に問題があることが考えられます。 、サーバーは 5XX を返し、その後再試行しますが、解決できません。そのため、各クロールが最後のクロールの結果を上書きするのではなく、最後の結果を保持し、今回クロールされ、最後の結果には含まれていなかった新しいマグネット リンク リソースを追加することが決定されました。

その他の必須属性:

cookie = '' #每次请求需要带上的Cookie。由于琉璃神社目前不需要登录,暂为空串max_depth = 40 #递归最大深度,即从一个网页查找全部链接并依次往下递归访问,最大的深度为40viewed_urls = [] #访问过的URL,避免重复访问found_magnets = [] #查找出来的磁力链资源,避免重复抓取ignore_url_param = True #是否忽略URL中的参数,比如"index.html?xxx=11"将被替换为"index.html"ignore_html_label = True #是否忽略HTML标签内属性
元の Web サイトとの同期を確実にするために、クロール スクリプトを定期的に実行する必要があります。次のように機能するシェル スクリプト sync.sh を作成しました。

ターゲット Web サイトにアクセスできるかどうかをテストします。

    最後のクロール結果の Magnet_output と resource_list.json をアーカイブにコピーします。ディレクトリ アーカイブ、現在時刻で名前変更
  • 最後のクロール ログ lastsync.log と lasterror.log をアーカイブ用のログ ディレクトリにコピー、現在時刻で名前変更
  • Python クロール スクリプトを実行します。これにより、プロジェクト ルート ディレクトリにある上記のクロール結果ファイルとクロール ログ ファイルが上書きされます
  • このクロール結果の概要 (成功したかどうか、いくつかの新しいレコード、およびいくつかの簡単な統計) を README に追加します。
  • の md が GitHub にプッシュされました
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。