Exemplo n.º 1
0
    def __init__(self,
                 use_redis=False,
                 debug=False,
                 mood_begin=0,
                 mood_num=-1,
                 stop_time='-1',
                 download_small_image=False,
                 download_big_image=False,
                 download_mood_detail=True,
                 download_like_detail=True,
                 download_like_names=True,
                 recover=False,
                 cookie_text=None,
                 from_web=False,
                 username='',
                 nickname='',
                 no_delete=True):
        """
        init method
        :param use_redis: If true, use redis and json file to save data, if false, use json file only.
        :param debug: If true, print info in console
        :param mood_begin: 开始下载的动态序号,0表示从第0条动态开始下载
        :param mood_num: 下载的动态数量,最好设置为20的倍数
        :param stop_time: 停止下载的时间,-1表示全部数据;注意,这里是倒序,比如,stop_time="2016-01-01",表示爬取当前时间到2016年1月1日前的数据
        :param recover: 是否从redis或文件中恢复数据(主要用于爬虫意外中断之后的数据恢复)
        :param download_small_image: 是否下载缩略图,仅供预览用的小图,该步骤比较耗时,QQ空间提供了3中不同尺寸的图片,这里下载的是最小尺寸的图片
        :param download_big_image: 是否下载大图,QQ空间中保存的最大的图片,该步骤比较耗时
        :param download_mood_detail:是否下载动态详情
        :param download_like_detail:是否下载点赞的详情,包括点赞数量、评论数量、浏览量,该数据未被清除
        :param download_like_names:是否下载点赞的详情,主要包含点赞的人员列表,该数据有很多都被清空了
        """
        BaseSpider.__init__(self,
                            use_redis=use_redis,
                            debug=debug,
                            mood_begin=mood_begin,
                            mood_num=mood_num,
                            stop_time=stop_time,
                            download_small_image=download_small_image,
                            download_big_image=download_big_image,
                            download_mood_detail=download_mood_detail,
                            download_like_detail=download_like_detail,
                            download_like_names=download_like_names,
                            recover=recover,
                            cookie_text=cookie_text,
                            from_web=from_web,
                            username=username,
                            nickname=nickname,
                            no_delete=no_delete)

        self.req = requests.Session()
        self.cookies = {}
        self.qzonetoken = ""
        self.g_tk = 0
        self.init_file_name(self.file_name_head)
        self.init_parameter()
Exemplo n.º 2
0
    def __init__(self, use_redis=False, debug=False, mood_begin=0, mood_num=-1, stop_time='-1',
                 download_small_image=False, download_big_image=False,
                 download_mood_detail=True, download_like_detail=True, download_like_names=True, recover=False,
                 cookie_text=None, from_web=False, username='', nickname='', no_delete=True, pool_flag='127.0.0.1',
                 from_client=False, get_visit=False):
        """
        init method
        :param use_redis: If true, use redis and json file to save data, if false, use json file only.
        :param debug: If true, print info in console
        :param mood_begin: 开始下载的动态序号,0表示从第0条动态开始下载
        :param mood_num: 下载的动态数量,最好设置为20的倍数
        :param stop_time: 停止下载的时间,-1表示全部数据;注意,这里是倒序,比如,stop_time="2016-01-01",表示爬取当前时间到2016年1月1日前的数据
        :param recover: 是否从redis或文件中恢复数据(主要用于爬虫意外中断之后的数据恢复),注意,此功能在多线程中不可用
        :param download_small_image: 是否下载缩略图,仅供预览用的小图,该步骤比较耗时,QQ空间提供了3中不同尺寸的图片,这里下载的是最小尺寸的图片
        :param download_big_image: 是否下载大图,QQ空间中保存的最大的图片,该步骤比较耗时
        :param download_mood_detail:是否下载动态详情
        :param download_like_detail:是否下载点赞的详情,包括点赞数量、评论数量、浏览量,该数据未被清除
        :param download_like_names:是否下载点赞的详情,主要包含点赞的人员列表,该数据有很多都被清空了
        :param from_web: 表示是否来自web接口,如果为True,将该请求来自web接口,则不会读取配置文件
        :param username: 在web模式中,传递过来的用户QQ号
        :param nickname: 在web模式中,传递过来的用户昵称
        :param no_delete: 是否在redis中缓存数据,如果为True,则不会删除,如果为False,则设置24小时的缓存时间
        :param pool_flag: redis的连接池host,因为docker中host与外部不同,所以在启动程序时会自动判断是不是处于docker中
        """
        BaseSpider.__init__(self, use_redis=use_redis, debug=debug, mood_begin=mood_begin, mood_num=mood_num,
                            stop_time=stop_time,
                            download_small_image=download_small_image, download_big_image=download_big_image,
                            download_mood_detail=download_mood_detail, download_like_detail=download_like_detail,
                            download_like_names=download_like_names, recover=recover, cookie_text=cookie_text,
                            from_web=from_web, username=username, nickname=nickname, no_delete=no_delete,
                            pool_flag=pool_flag, from_client=from_client, get_visit=get_visit)

        self.cookies = cookiejar.CookieJar()
        self.req.cookies = self.cookies
        connection_num = 20 * SPIDER_USER_NUM_LIMIT
        # 设置连接池大小
        self.req.mount('https://', HTTPAdapter(pool_connections=5, pool_maxsize=connection_num))
        self.req.mount('http://', HTTPAdapter(pool_connections=5, pool_maxsize=connection_num))
        self.qzonetoken = ""
        self.g_tk = 0
        self.init_parameter()
        self.qzone_login_url = 'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&&hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_url=https%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_link=https%3A//z.qzone.com/download.html&self_regurl=https%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=https%3A//z.qzone.com/download.html&pt_no_auth=0'
Exemplo n.º 3
0
 def test_get_json(self):
     test_str = '_Callback( {"code":0, "subcode":0, "message":"succ"});'
     expect = '{"code":0, "subcode":0, "message":"succ"}'
     bs = BaseSpider(use_redis=False, from_web=False)
     res = bs.get_json(test_str)
     assert res == expect
Exemplo n.º 4
0
 def test_read_config_file(self):
     BaseSpider(use_redis=False, from_web=False)
Exemplo n.º 5
0
 def test_connect_redis(self):
     bs = BaseSpider(use_redis=True, from_web=True)
     bs.connect_redis()
Exemplo n.º 6
0
    def __init__(self,
                 use_redis=False,
                 debug=False,
                 mood_begin=0,
                 mood_num=-1,
                 stop_time='-1',
                 download_small_image=False,
                 download_big_image=False,
                 download_mood_detail=True,
                 download_like_detail=True,
                 download_like_names=True,
                 recover=False,
                 cookie_text=None,
                 from_web=False,
                 username='',
                 nickname='',
                 no_delete=True,
                 pool_flag='127.0.0.1'):
        """
        init method
        :param use_redis: If true, use redis and json file to save data, if false, use json file only.
        :param debug: If true, print info in console
        :param mood_begin: 开始下载的动态序号,0表示从第0条动态开始下载
        :param mood_num: 下载的动态数量,最好设置为20的倍数
        :param stop_time: 停止下载的时间,-1表示全部数据;注意,这里是倒序,比如,stop_time="2016-01-01",表示爬取当前时间到2016年1月1日前的数据
        :param recover: 是否从redis或文件中恢复数据(主要用于爬虫意外中断之后的数据恢复),注意,此功能在多线程中不可用
        :param download_small_image: 是否下载缩略图,仅供预览用的小图,该步骤比较耗时,QQ空间提供了3中不同尺寸的图片,这里下载的是最小尺寸的图片
        :param download_big_image: 是否下载大图,QQ空间中保存的最大的图片,该步骤比较耗时
        :param download_mood_detail:是否下载动态详情
        :param download_like_detail:是否下载点赞的详情,包括点赞数量、评论数量、浏览量,该数据未被清除
        :param download_like_names:是否下载点赞的详情,主要包含点赞的人员列表,该数据有很多都被清空了
        :param from_web: 表示是否来自web接口,如果为True,将该请求来自web接口,则不会读取配置文件
        :param username: 在web模式中,传递过来的用户QQ号
        :param nickname: 在web模式中,传递过来的用户昵称
        :param no_delete: 是否在redis中缓存数据,如果为True,则不会删除,如果为False,则设置24小时的缓存时间
        :param pool_flag: redis的连接池host,因为docker中host与外部不同,所以在启动程序时会自动判断是不是处于docker中
        """
        BaseSpider.__init__(self,
                            use_redis=use_redis,
                            debug=debug,
                            mood_begin=mood_begin,
                            mood_num=mood_num,
                            stop_time=stop_time,
                            download_small_image=download_small_image,
                            download_big_image=download_big_image,
                            download_mood_detail=download_mood_detail,
                            download_like_detail=download_like_detail,
                            download_like_names=download_like_names,
                            recover=recover,
                            cookie_text=cookie_text,
                            from_web=from_web,
                            username=username,
                            nickname=nickname,
                            no_delete=no_delete,
                            pool_flag=pool_flag)

        self.req = requests.Session()
        connection_num = 20 * SPIDER_USER_NUM_LIMIT
        # 设置连接池大小
        self.req.mount(
            'https://',
            HTTPAdapter(pool_connections=5, pool_maxsize=connection_num))
        self.req.mount(
            'http://',
            HTTPAdapter(pool_connections=5, pool_maxsize=connection_num))
        self.cookies = {}
        self.qzonetoken = ""
        self.g_tk = 0
        self.init_parameter()