【问题标题】:web scraper with HTTP Error 503: Service Unavailable带有 HTTP 错误 503 的网络爬虫:服务不可用
【发布时间】:2016-07-26 21:20:47
【问题描述】:

我正在尝试构建一个爬虫,但我不断收到 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

【问题讨论】:

  • 您的代码无法遵循,您为什么要混合库?
  • 我删掉了一些我正在尝试的东西。我为额外的东西道歉。
  • 为什么要用pycurl、urllib2、requests和urllib?
  • 我在没有太多帮助的情况下被卷入其中。我以前从来没有做过这样的事情。我试过只使用一个,但我所做的一切都没有奏效。我承认我不知道我在做什么。数周以来我一直试图解决这个问题,但没有成功,所以我正在努力找人来帮助我。
  • 首先,我会将您的代码缩小到最低限度以重现您的问题,然后也许我们可以解决一些问题。你真的在每个请求之间睡觉吗?

标签: python-2.7 web-scraping


【解决方案1】:

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

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

PS:

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

【讨论】:

    【解决方案2】:

    表现得像使用浏览器的普通人一样。该网站似乎旨在分析您的行为并认为您是爬虫,并想阻止您;在最简单的情况下,动态更改链接 URL 的最小 JavaScript 就足以禁用“愚蠢”的抓取工具。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多