2017-10-31 5 views
0

Wenn ich versuche, die URL zu beantragen:scrapy'request scheint umgeleitet werden

http://www.iqiyi.com/v_19rrk4vf0k.html 

hier ist Spinne:

class URLredirect(scrapy.Spider): 
    name = 'urlredirect_spider' 
def start_requests(self): 
    reqs = [] 
    url = 'http://www.iqiyi.com/v_19rrk4vf0k.html' 
    req = scrapy.Request(url, headers=headers, meta={'url': url}) 
    reqs.append(req) 
    return reqs 

def parse(self, response): 
    responseURL = response.url 
    requestURL = response.meta['url'] 
    print '''Response's URL: ''', response.url 
    print '''Request's URL: ''', response.meta['url'] 
    if str(responseURL).__eq__(requestURL): 
     print re.compile('<title>(.*?)</title>').findall(response.body)[0].decode('utf-8') 
    else: 
     print '==================================================================================' 
     yield scrapy.Request(url=requestURL, headers=headers, meta={'url': requestURL}, callback=self.parse) 

wenn ich mein Programm laufen, bekomme ich diese Folge (drei Ergebnisse):

enter image description here

ich bin verwirren, warum dies nur geschehen Es scheint, umgeleiteten zufällig zu sein ist hier meine Middleware:?!

class ProxyMiddleware(object): 
    REDIS_HOST = 'myip' 
    REDIS_PORT = myport 
    redisclient = redis.Redis(REDIS_HOST, REDIS_PORT) 
    DONT_RETRY_ERRORS = (TimeoutError, ConnectionRefusedError, ResponseNeverReceived, ConnectError, ValueError) 
def process_request(self, request, spider): 
    """ 
    将request设置为使用代理 
    """ 
    try: 
     self.redisclient = redis.Redis(self.REDIS_HOST, self.REDIS_PORT) 
     proxy = self.redisclient.srandmember(proxy_key) 
     proxyjson = json.loads(proxy) 
     ip = proxyjson["ip"] 
     # print ip 
     request.meta['proxy'] = "http://%s" % ip 

     # Use the following lines if your proxy requires authentication 
     proxy_user_pass = "avcspider:aowei123" 
     # setup basic authentication for the proxy 
     encoded_user_pass = base64.b64encode(proxy_user_pass) 
     request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass 
    except Exception, ee: 
     import logging 
     logging.error(ee) 
     pass 

def process_exception(self, request, exception, spider): 
    """ 
    处理由于使用代理导致的连接异常 则重新换个代理继续请求 
    """ 
    # print '错误类型', exception.message 
    if isinstance(exception, self.DONT_RETRY_ERRORS): 
     new_request = request.copy() 
     try: 
      self.redisclient = redis.Redis(self.REDIS_HOST, self.REDIS_PORT) 
      proxy = self.redisclient.srandmember(proxy_key) 
      proxyjson = json.loads(proxy) 
      ip = proxyjson["ip"] 
      new_request.meta['proxy'] = "http://%s" % ip 
     except: 
      pass 
     return new_request 

Hat jede falsche Nachricht gibt Dank voran

Antwort

0

By the way, mein LOGLEVEL ist „ERROR“, deshalb habe ich ein paar Infomationen in meiner Konsole bekommen nur

0

Verwenden Sie die richtigen Anforderungsheader wie der Browser für diese Website. Meine Vermutung ist, sie werden umgeleitet, weil Sie nicht verwenden, jede user-agent

headers = { 
    'DNT': '1', 
    'Accept-Encoding': 'gzip, deflate', 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Upgrade-Insecure-Requests': '1', 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 
    'Connection': 'keep-alive', 
} 

scrapy.Request(url, headers=headers, meta={'url': url}) 

Ich bin sicher, dass sie jetzt nicht umleitet

+0

eh, ich habe Header, aber ich habe es einfach nicht auf – Gpwner

+0

einfügen Es ist nicht die Frage der Header sowieso, danke – Gpwner

Verwandte Themen