2016-08-26 42 views
1

ウェブサイト上の公開情報(アップルアプリの情報)をクロールしようとしています。Pythonのスクレイピング:403と503のエラー

「検索アプリ/開発者」などの操作を実行するには、このウェブサイトにログインする必要があります。多くのウェブサイトが同様の情報を提供していますが、私はこの特定のウェブサイトが各アプリの最も完全で詳細な情報を提供していると考えています。

私は、有効なユーザーとして、タスクを実行できます。

しかし、私はpythonコード経由で情報にアクセスしようとすると、POST要求を送信するときに403エラーが発生し、Get要求を送信するときに504エラーが発生します。

私が使用しようとしている

  1. 実のuserAgentヘッダ

  2. 偽-ユーザエージェント」パッケージ

  3. FancyOpener [/ようなSTH、パイソン3.4ため償却示す]

  4. HttpAuthM .. [/ sthのように、認証のために、まだ動作しません]

ウェブサイトは自動化されたアクセスには強くないと思われますが、詳細情報は非常に便利です。この問題を回避できる方法はありますか?

ありがとうございます!

Iは、このヘッダーを試みた:

ua = {#'User-Agent':'Mozilla/5.0 (compatible; Googlebot/2.1; +Googlebot - Webmaster Tools Help)', 
     'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36', 
     'Connection':'Keep-Alive', 
     'Accept-Language':'zh-CN,zh;q=0.8', 
     'Accept-Encoding':'gzip,deflate,sdch', 
     'Accept':'*/*', 
     'Accept-Charset':'GBK,utf-8;q=0.7,*;q=0.3', 
     'Cache-Control':'max-age=0' 
     } 

503 Error

403 Error

------------------------------------------------ HTTPError 
Traceback (most recent call last) <ipython-input-43-421b27c5194e> in <module>() 
    68 data= data.encode('utf-8') 
    69 request = urq.Request(url, data, headers = ua) 
---> 70 response = urq.urlopen(request) 
    71 the_page = response.read() 
    72 print(the_page) 

c:\python34\lib\urllib\request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context) 
    159  else: 
    160   opener = _opener 
--> 161  return opener.open(url, data, timeout) 
    162 
    163 def install_opener(opener): 

c:\python34\lib\urllib\request.py in open(self, fullurl, data, timeout) 
    468   for processor in self.process_response.get(protocol, []): 
    469    meth = getattr(processor, meth_name) 
--> 470    response = meth(req, response) 
    471 
    472   return response 

c:\python34\lib\urllib\request.py in http_response(self, request, response) 
    578   if not (200 <= code < 300): 
    579    response = self.parent.error(
--> 580     'http', request, response, code, msg, hdrs) 
    581 
    582   return response 

c:\python34\lib\urllib\request.py in error(self, proto, *args) 
    506   if http_err: 
    507    args = (dict, 'default', 'http_error_default') + orig_args 
--> 508    return self._call_chain(*args) 
    509 
    510 # XXX probably also want an abstract factory that knows when it makes 

c:\python34\lib\urllib\request.py in _call_chain(self, chain, kind, meth_name, *args) 
    440   for handler in handlers: 
    441    func = getattr(handler, meth_name) 
--> 442    result = func(*args) 
    443    if result is not None: 
    444     return result 

c:\python34\lib\urllib\request.py in http_error_default(self, req, fp, code, msg, hdrs) 
    586 class HTTPDefaultErrorHandler(BaseHandler): 
    587  def http_error_default(self, req, fp, code, msg, hdrs): 
--> 588   raise HTTPError(req.full_url, code, msg, hdrs, fp) 
    589 
    590 class HTTPRedirectHandler(BaseHandler): 

HTTPError: HTTP Error 403: FORBIDDEN 
---------------------------------------------- 

Iが要求を送信するためにクロム拡張である "高度なRESTクライアント" を使用して得られた以下の結果を。ログインを必要としないページでは、コードは200であることに注意してください。他の一つは

以下のコメントでログインpage.Seeリンク[アクセス成功] [3]

で403だった[アクセスが失敗]、[4]

答えて

0

無地のpython要求パッケージは十分です、あなたは「shouldn他のパッケージが必要です。

ブラウザのリクエストを完全にはエミュレートしていないのが問題です。 Google ChromeとMozilla Firefoxでは、開発者パネルからリクエストヘッダーを見ることができるはずです。

必ずと同じセッションオブジェクトを使用してください。

適切なヘッダーを設定することを忘れないようにしてください:

  • のUser-Agent
  • は(受け入れ-エンコーディングを
  • リファラー前のGETのURLを
  • のAccept-言語
  • を受け入れます要求)
  • 接続(キープアライブ)
  • ホスト(abc.website.com)

session.headers = { 
    'User-Agent' : 'real one', 
    ... 
} 

は、リダイレクトを尊重してください:POSTリクエストで

session.get(url, allow_redirects=True, timeout=x_secs) 

は(CSFRトークンのような)いくつかの隠されたものがあるかもしれない、あなたが必要なすべてのフィールドを送信してください。

+0

こんにちは@先生、正しくエミュレートされたリクエストとセッションのサンプルをリクエストするのは大丈夫ですか?私は前にこのヘッダーを試しましたが、まだ失敗しました。問題は何ですか? – KeepLearning

+0

申し訳ありません、編集済みの記事をご覧ください。私はコメントに投稿しようとしましたが、あまりにも難しい – KeepLearning

+0

があります。隠れたフィールドやヘッダーがないかもしれません。あなたのコードと、動作していないページへのリンクを投稿できますか? あなたは、[3]ホストヘッダー – nonsensei

関連する問題