HTTP错误503的Web刮刀:服务不可用

时间:2016-07-26 21:20:47

标签: python-2.7 web-scraping

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

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

2 个答案:

答案 0 :(得分:0)

像使用浏览器的普通人一样行事。该网站似乎旨在分析您的行为并发现您是一名刮刀,并希望阻止您;在最简单的情况下,即时更改链接URL的最小JavaScript就足以禁用" dumb"刮削器。

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

答案 1 :(得分:0)

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

同时在浏览器中打开该链接并与Firebug一起打开,并在发出请求时查看浏览器发送给服务器的Headers。然后尝试伪造所有这些标题。

PS:

在我看来,从SAME IP发送随机用户代理字符串不会有任何区别,除非您正在轮换IP。