2016-07-26 19 views
1

スクレーパーを構築しようとしていますが、503ブロックエラーが発生しています。私は手動でウェブサイトにアクセスすることができますので、私のIPアドレスはブロックされていません。ユーザーエージェントの切り替えを続けているにもかかわらず、すべての方法でコードを実行できません。時々私は15になることもありますが、時には私は何も得られませんが、それはいつも失敗します。私は自分のコードで何か間違っていることに疑いはありません。私はフィットするようにそれを剃ったが、だから心に留めてください。第三者を使用せずにこれを修正するにはどうすればよいですか?HTTPエラー503のWebスクレーパー:サービスを利用できません

import requests 
import urllib2 
from urllib2 import urlopen  
import random 
from contextlib import closing 
from bs4 import BeautifulSoup 
import ssl 
import parser 
import time 
from time import sleep 

def Parser(urls): 
    randomint = random.randint(0, 2) 
    randomtime = random.randint(5, 30) 

    url = "https://www.website.com" 
    user_agents = [ 
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)", 
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)", 
"Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.2.15 Version/10.00" 
    ] 
    index = 0 
    opener = urllib2.build_opener() 
    req = opener.addheaders = [('User-agent', user_agents[randomint])] 

def ReadUPC(): 
    UPCList = [ 
    'upc', 
    'upc2', 
    'upc3', 
    'upc4', 
    'etc.' 
    ]   

    extracted_data = [] 
    for i in UPCList: 
     urls = "https://www.website.com" + i 
     randomtime = random.randint(5, 30) 
     Soup = BeautifulSoup(urlopen(urls), "lxml") 
     price = Soup.find("span", { "class": "a-size-base a-color-price s-price a-text-bold"}) 
     sleep(randomtime) 

     randomt = random.randint(5, 15) 
     print "ref url:", urls 
     sleep(randomt) 
     print "Our price:",price 
     sleep(randomtime) 

if __name__ == "__main__": 
    ReadUPC() 
    index = index + 1  

sleep(10) 



    554 class HTTPDefaultErrorHandler(BaseHandler): 
    555  def http_error_default(self, req, fp, code, msg, hdrs): 
    556   raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
    557 
    558 class HTTPRedirectHandler(BaseHandler): 

HTTPError: HTTP Error 503: Service Unavailable 
+0

あなたのコードに従うことは不可能です、どうしてライブラリーが混ざっていますか? –

+0

私は試していたことをいくつか切りました。私はエクストラをお詫び申し上げます。 – jstats

+0

なぜpycurl、urllib2、要求とurllibを使用していますか? –

答えて

0

ブラウザを使用して通常の人間のように動作します。そのウェブサイトはあなたの行動を分析するように設計されており、あなたがスクレーパーであり、あなたをブロックしたいと考えているようです。最も簡単なケースでは、リンクURLをオンザフライで変更する最小限のJavaScriptだけで、「ダム」スクレイパーを無効にすることができます。

このジレンマを解決するためのエレガントな方法があります。たとえば、ブラウザを装備するなどの方法がありますが、これは外部ツールなしでは起こりません。

0

あなたが掻いているウェブサイトは?ほとんどのウェブサイトはクッキーを使用してユーザーを認識します。あなたのコードでクッキーを有効にしてください。

ブラウザでもFirebugとともにこのリンクを開き、要求時にブラウザでサーバにHeadersを送信してください。これらのヘッダーをすべて偽造しようとします。

PS:私の見解では

、あなたがIPを回転している場合を除き文句を言わない、任意の違いを作るのと同じIPからランダムユーザーエージェント文字列を送信します。

関連する問題