1

python3.3 と requests モジュールを使用して、任意の Web ページからリンクをスクレイピングします。私のプログラムは次のように動作します: 最初に開始 URL だけを含む URL のリストがあります。プログラムはそのリストをループし、URL をプロシージャ GetLinks に渡します。ここで、requests.get と Beautifulsoup を使用してすべてのリンクを抽出します。その手順が私の urllist にリンクを追加する前に、それらを別の手順 testLinks に渡して、内部、外部、または壊れたリンクかどうかを確認します。testLinks im では、requests.get も使用して、リダイレクトなどを処理できるようにします。

プログラムはこれまでのところ非常にうまく機能し、かなりの数の Web サイトでテストし、2000 のサイトなどのページのすべてのリンクを取得することができました。このページでは、一部の TCP 接続がリセットされないことがあります。その場合、最初の URL に対する最初の要求がリセットされず、接続時間はプログラムが実行されている限り続くようです。

わかりました。私の最初の試みは、testLinks プロシージャで .get の代わりに requests.head を使用することでした。そして、すべてがうまくいきます!接続は必要に応じて解放されます。しかし、問題は、requests.head から取得した情報が十分ではないことです。リダイレクトされた URL とリダイレクトの回数を確認できません。それから私は requests.head を試しました

allow_redirects=True

残念ながら、これは実際の .head リクエストではなく、通常の .get リクエストです。だから私は同じ問題を抱えています。私もパラメータを設定するために使用しようとしました

keep_alive=False

しかし、それもうまくいきませんでした。リダイレクトの問題のために testLinks で urllib.request(url).geturl() を使用しようとしましたが、ここでも同じ問題が発生し、TCP 接続がリセットされません。この問題を回避するために多くのことを試みましたが、リクエストセッションを使用しましたが、同じ問題もありました。また、ヘッダー情報 Connection: close を使用して request.post を試しましたが、機能しませんでした。

ヒットしたと思われるいくつかのリンクを分析しましたが、これまでのところ、301->302 などのリダイレクトと関係があると考えています。しかし、私がテストした他のすべてのWebサイトでは、そのようなリダイレクトがあったに違いないため、よくわかりません.

誰かが私を助けてくれることを願っています。情報については、VPN接続を使用してすべてのWebサイトを表示できるようにしています。これは、私が現在いる国がいくつかのページをブロックしているためです。これは私にとって興味深いものです. もちろん、VPNなしでテストしましたが、同じ問題がありました.

リダイレクトの場合にフィンランドのURLとおそらくリダイレ​​クトの数を確認できれば、testLinksのrequest.headで十分なので、回避策があるかもしれません。

テキストが読みにくい場合は、コードのスキームを提供します。

どうもありがとう!

4

0 に答える 0