class?RandomUserAgentMiddleware(object):
????def?__init__(self,?crawler):
????????super(RandomUserAgentMiddleware,?self).__init__()
????????self.ua?=?UserAgent()
????????self.per_proxy?=?crawler.settings.get('RANDOM_UA_PER_PROXY',?False)
????????self.ua_type?=?crawler.settings.get('RANDOM_UA_TYPE',?'random')
????????self.proxy2ua?=?{}
????@classmethod
????def?from_crawler(cls,?crawler):
????????return?cls(crawler)
????def?process_request(self,?request,?spider):
????????def?get_ua():
????????????'''Gets?random?UA?based?on?the?type?setting?(random,?firefox…)'''
????????????return?getattr(self.ua,?self.ua_type)
????????if?self.per_proxy:
????????????proxy?=?request.meta.get('proxy')
????????????if?proxy?not?in?self.proxy2ua:
????????????????self.proxy2ua[proxy]?=?get_ua()
????????????????logger.debug('Assign?User-Agent?%s?to?Proxy?%s'
?????????????????????????????%?(self.proxy2ua[proxy],?proxy))
????????????request.headers.setdefault('User-Agent',?self.proxy2ua[proxy])
????????else:
????????????ua?=?get_ua()
????????????request.headers.setdefault('User-Agent',?get_ua())@classmethod ? ?def from_crawler(cls, crawler): ? ? ? ?return cls(crawler)我知道@classmethod是個類方法cls后面打點可以調用類屬性但這里cls后面加 ( ) 是個什么鬼啊?這里return出去的又是個什么東西啊?他要return給誰啊??@classmethod ? ?def from_crawler(cls, crawler): ? ? ? ?return cls(crawler)??他究竟想表達什么意思啊?
添加回答
舉報
0/150
提交
取消