3

Web スクレイピング タスクのために Python を使用して Web ページをダウンロードしたいと考えています。問題は、Web サイトで Cookie を有効にする必要があることです。そうしないと、別のバージョンのページが表示されます。問題を解決するソリューションを実装しましたが、私の意見では非効率的です。それを改善するためにあなたの助けが必要です!

これが私が今それを乗り越える方法です:

import requests
import cookielib

cj = cookielib.CookieJar()
user_agent = {'User-agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}
#first request to get the cookies
requests.get('https://ccirecruit.cox.com/psc/RECRUIT/EMPLOYEE/HRMS/c/HRS_HRAM.HRS_CE.GBL?JobOpeningId=42845&SiteId=1&Page=HRS_CE_JOB_DTL&PostingSeq=1&',headers=user_agent, timeout=2, cookies = cj)
# second request reusing cookies served first time
r = requests.get('https://ccirecruit.cox.com/psc/RECRUIT/EMPLOYEE/HRMS/c/HRS_HRAM.HRS_CE.GBL?JobOpeningId=42845&SiteId=1&Page=HRS_CE_JOB_DTL&PostingSeq=1&',headers=user_agent, timeout=2, cookies = cj)
html_text = r.text

基本的に、CookieJarオブジェクトを作成してから、同じ URL に対して 2 つの連続した要求を送信します。初めて悪いページが表示されますが、補償として Cookie が提供されます。2 番目のリクエストはこの Cookie を再利用し、適切なページを取得します。

問題は、1 つのリクエストを使用するだけで、適切な Cookie 対応バージョンのページを取得できるかどうかです。

トラフィックを最小化するHEAD代わりに、初めてリクエストを送信しようとしました。この場合、Cookie は提供されません。GETグーグルで検索しても答えが得られませんでした。ということで、効率よく作る方法が分かって面白いです!何か案は?!

4

2 に答える 2

2

ここでの勝者は、Cookie を処理するrequestsのフレームワークを使用することだと思います。session

それは次のようになります。

import requests
import cookielib

user_agent = {'User-agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}
s = requests.session(headers=user_agent, timeout=2)

r = s.get('https://ccirecruit.cox.com/psc/RECRUIT/EMPLOYEE/HRMS/c/HRS_HRAM.HRS_CE.GBL?JobOpeningId=42845&SiteId=1&Page=HRS_CE_JOB_DTL&PostingSeq=1&')
html_text = r.text

それを試してみて、それが機能するかどうかを確認してください。

于 2012-11-19T02:57:24.327 に答える
2

Cookie を取得するにはリクエストを行う必要があるため、Cookie を取得して再利用するには、2 つの別々のリクエストを行う必要があります。「Cookie 対応」とは、スクリプトが Cookie を持っていると認識するバージョンを意味する場合、それはすべてサーバーに依存するため、以下を試すことができます。

  • 最初のリクエストを行う前に Cookie をハードコーディングし、
  • 最初の Cookie を取得するために、可能な限り小さなページ (Cookie を含む可能な限り小さな応答) を要求し、
  • いくつかのウォークアラウンドを見つけようとしています (GET 引数を追加すると、サイトが Cookie を持っていると信じ込ませる可能性がありますが、この特定のサイトではそれを見つける必要があります)、
于 2012-11-19T02:05:01.993 に答える