与HTTP的网络刮板错误503:服务不可用

问题描述:

我想构建一个刮板,但我不断收到503阻止错误。我仍然可以手动访问网站,所以我的IP地址没有被阻止。我不停地切换用户代理,仍然无法让我的代码一直运行。有时我会达到15岁,有时候我没有得到,但最终总是失败。我毫不怀疑我在代码中做错了什么。不过,我确实把它剃掉了,所以请记住这一点。如何在不使用第三方的情况下解决此问题?与HTTP的网络刮板错误503:服务不可用

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,requests和urllib? –

表现得像一个正常人使用浏览器。该网站似乎旨在分析你的行为,并看到你是一个刮板,并想阻止你;在最简单的情况下,一个最小的JavaScript即时更改链接URL足以禁用“哑”刮板。

有一些优雅的方法可以解决这个难题,例如通过浏览器,但是如果没有外部工具,这种情况就不会发生。

你在刮什么网站?大多数网站也使用cookie来识别用户。请在您的代码中启用Cookie。

同时在浏览器中打开该链接以及Firebug,并在请求时通过浏览器向服务器发送Headers。然后尝试伪造所有这些标题。

PS:

在我看来,从发送SAME IP随机用户代理字符串不会让任何区别,除非你是旋转的IP。