【发布时间】: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?
-
我在没有太多帮助的情况下被卷入其中。我以前从来没有做过这样的事情。我试过只使用一个,但我所做的一切都没有奏效。我承认我不知道我在做什么。数周以来我一直试图解决这个问题,但没有成功,所以我正在努力找人来帮助我。
-
首先,我会将您的代码缩小到最低限度以重现您的问题,然后也许我们可以解决一些问题。你真的在每个请求之间睡觉吗?