def __init__(self, mysql_session, limit, loginUser, loginPass, tooFrequent=0, timeIntervalBase=0.5, failedToVisitCountLimit=5): # 此模块日志 self.logger = logging.getLogger('hjspider.user') # 传入的要访问的文章uid self.fromUids = [] # 下一个要访问的uid的下标 self.fromUidsIndex = 0 # 以访问的用户(包括私有用户) self.userUids = set() # 私有用户数量 self.privateUids = 0 # 访问用户数量限制 self.limit = limit # 判断是否已超出限制 self.isOverLimited = False # 因为某种原因添加进来的uid,需要提前访问(比如文章作者) self.uidsPriority = [] # 当前在访问的文章uid self.currArticleUid = '' # 当前的用户数组 self.currentUsersSoupList = [] # 下一次要访问的页数 self.currentPageIndex = 1 # 当前文章共有多少页用户 self.currentTotalPageCounts = 0 # 上一次访问的用户的信息 self.lastUserInfo = None # 上一次访问的用户,以及访问的次数(有时候因为某种原因,访问某用户页面频繁出错,一定次数后需放弃) self.lastUserVisitInfo = ['', 0] # 次数限制 self.failedToVisitCountLimit = failedToVisitCountLimit # 访问失败的用户数组(不是设为隐私的用户,隐私用户自动放弃,可有些不是隐私却访问不到,这种要收集起来) self.failedToVisit = [] try: # 获取信息所需的登陆session self.session = Utils.userLogin(loginUser, loginPass) except Exception: self.logger.error('登陆失败!') exit(-1) # 数据库 self.mysql_session = mysql_session # 在网站返回"访问太频繁"的消息后,时间间隔乘2 self.tooFrequent = int(tooFrequent) self.timeIntervalBase = float(timeIntervalBase)
def __init__(self, mysql_session, limit, loginUser='', loginPass='', timeIntervalBase=0.5, failedToVisitCountLimit=5, isLogin=True): ''' :param mysql_session: 数据库会话 required :param limit: 用户数量限制 required :param loginUser: 若要登陆,则需要传入用户名,密码 :param loginPass: :param timeIntervalBase: 普通状态下每次sleep值, 或是 timeIntervalBase * 2 ** ? 的基数 :param failedToVisitCountLimit: 用户页面访问失败后,重试的次数 :param isLogin: 是否需要用户登陆去访问网页 :return: ''' loggerName = 'hjspider.' + str(current_thread()) self.logger = logging.getLogger(loggerName) # 传入的要访问的文章uid self.fromUids = [] # 下一个要访问的uid的下标 self.fromUidsIndex = 0 # 以访问的用户(包括私有用户) self.userUids = set() # 访问用户数量限制 self.limit = limit # 判断是否已超出限制 self.isOverLimited = False # 因为某种原因添加进来的uid,需要提前访问(比如文章作者) self.uidsPriority = [] # 当前在访问的文章uid self.currArticleUid = '' # 当前的用户数组 self.currentUsersSoupList = [] # 下一次要访问的页数 self.currentPageIndex = 1 # 当前文章共有多少页用户 self.currentTotalPageCounts = 0 # 上一次访问的用户的信息 self.lastUserInfo = None # 上一次访问的用户,以及访问的次数(有时候因为某种原因,访问某用户页面频繁出错,一定次数后需放弃) self.lastUserVisitInfo = ['', 0] # 次数限制 self.failedToVisitCountLimit = failedToVisitCountLimit # 访问失败的用户数组(不是设为隐私的用户,隐私用户自动放弃,可有些不是隐私却访问不到,这种要收集起来) self.failedToVisit = [] # 是否需要登陆 self.isLogin = isLogin if isLogin is True and loginUser == '' and loginPass == '': self.logger.error('username or password is needed !') exit(-1) try: # 获取信息所需的登陆session self.session = Utils.userLogin(loginUser, loginPass) if isLogin is True else None except Exception: self.logger.error('登陆失败!') exit(-1) # 数据库 self.mysql_session = mysql_session # 在网站返回"访问太频繁"的消息后,时间间隔乘2 self.tooFrequent = 0 self.timeIntervalBase = float(timeIntervalBase)