ホームページ  >  記事  >  バックエンド開発  >  Python クローラーが Web ページをクロールするときに Web ページのリダイレクトに遭遇した場合はどうすればよいですか?

Python クローラーが Web ページをクロールするときに Web ページのリダイレクトに遭遇した場合はどうすればよいですか?

尚
オリジナル
2019-06-28 13:58:077835ブラウズ

Python クローラーが Web ページをクロールするときに Web ページのリダイレクトに遭遇した場合はどうすればよいですか?

検索エンジン クローラーは、ページをクロールするときに Web ページがリダイレクトされる状況に遭遇します。いわゆるリダイレクト (リダイレクト) は、さまざまな方法 (この記事ではこれら 3 つについて説明します) を介して行われます。他の場所 (URL) へのさまざまなネットワーク リクエスト。各WebサイトのトップページはWebサイトリソースへの入り口であり、Webサイトのトップページでリダイレクトが発生した場合、対応を誤るとWebサイト全体のコンテンツが見逃される可能性があります。

1. サーバー側のリダイレクトはサーバー側で完了します。一般に、クローラは自動的に適応することができ、応答コード 301 (永続的なリダイレクト)、302 (一時的なリダイレクト) などの特別な処理は必要ありません。 . .具体的には、リクエストで得られるレスポンスオブジェクト内のurlとstatus_codeの2つの属性で判断できます。 status_code が 301、302 などのリダイレクトを表すコードの場合は、元のリクエストがリダイレクトされたことを意味し、応答オブジェクトの url 属性がリクエスト送信時のリンクと一致しない場合も、元のリクエストがリダイレクトされたことを意味します。そして自動的に処理されています。

#请求重定向
#方法一
response.setStatus(302);
response.setHeader("location", "/day06/index.jsp");
        
#方法二
response.sendRedirect("/day06/index.jsp");

scrapy シェル リダイレクトされたページを取得します

scrapy shell -s ROBOTSTXT_OBEY=False --no-redirect " 
fetch(response.headers['Location'])

2. メタ更新、つまり、Web ページ内の e8e496c15ba93d81f6ea4fe5f55a2244 タグは、Web ページのリダイレクト リンクを宣言します。このリダイレクトはブラウザによって完了します。処理するにはコードを記述する必要があります。たとえば、以下の HTML コードの 3 行目のコメントに示されているように、特定のリダイレクトの場合、ブラウザは自動的にジャンプできますが、クローラーはジャンプ前のページを取得することしかできず、自動的にジャンプすることはできません。

<html>
<head>  
  <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本网页会在0.1秒内refresh为url所指的网页-->
</head>
</html>

解決策は、ジャンプ前のページのソースコードを取得し、リダイレクトURL情報(上記コード3行目のurl属性値)を抽出することです。具体的な操作:

①xpath('//meta[@http-equiv="refresh" and @content]/@content') を使用して content の値を抽出します

②正規表現を使用しますリダイレクトされた URL 値を抽出します。

3. js リダイレクト、JavaScript コードによるリダイレクト。たとえば、次の JavaScript コード

<script language=javascript>window.location.href=&#39;http://www.redirectedtoxxx.com&#39;</script>

は、Web ページにコンテンツが含まれている場合に最も簡単に解決できます。一般的に、これは基本的にハードコーディングされた静的な Web ページのコンテンツ、または動的 Web ページのコンテンツです。ページはテンプレートを使用してレンダリングされ、ブラウザは HTML を取得します。この HTML には、すべての重要な情報がすでに含まれているため、Web ページに直接表示されるコンテンツは、特定の HTML タグを介して JavaScript コードで読み込むことができます。この状況は、コンテンツがWebページを表示する際にHTMLタグ内にあるのですが、実際にはjsコードが実行されてタグに追加されるため、この時点では内容はjsコード内にあり、jsの実行はブラウザ側で行われますが、そのため、プログラムでWebページのアドレスをリクエストすると、WebページのコードとJSコードが返されるので、ブラウザ側で内容を確認することができます。 HTML タグが空であることを確認する必要があります。現時点での解決策は通常、content. 文字列を含む js コードを検索し、HTML タグを解析する代わりに正規表現を使用して対応するコンテンツを取得します。

Python 関連の技術記事の詳細については、Python チュートリアル 列にアクセスして学習してください。

以上がPython クローラーが Web ページをクロールするときに Web ページのリダイレクトに遭遇した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。