Beispiel #1
0
    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)
Beispiel #2
0
    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)