Пример #1
0
    def process_response(self, url_obj, flag, extract_url_list=None):
        """
        线程任务后期回调函数:
            解析HTML源码,获取下一层URLs 放入checking_url

        Args:
            extract_url_list : 返回抽取出的urls集合
            url_obj  : 被下载页面所处的url链接对象
            flag     : 页面下载具体情况的返回标志
                     - 0  : 表示下载成功且为非pattern页面
                     - 1  : 表示下载成功且为符合pattern的图片
                     - -1 : 表示页面下载失败
                     - 2  : depth >= max_depth 的非target - URL
        """
        if self.lock.acquire():
            if flag == -1:
                self.error_url.add(url_obj)

            elif flag == 0:
                self.checked_url.add(url_obj)
                    # link add into Checking_Url
                for ex_url in extract_url_list:
                    next_url_obj = url_object.Url(ex_url, int(url_obj.get_depth()) + 1)
                    if not self.is_visited(next_url_obj):
                        self.checking_url.put(next_url_obj)

            elif flag == 1:
                self.checked_url.add(url_obj)
            self.checking_url.task_done()
        self.lock.release()
Пример #2
0
 def test_has_visited_(self):
     """
     test True for func - is_visited()
     """
     url = url_object.Url("http://www.baidu.com")
     self.minispider.error_url.add(url)
     self.assertTrue(self.minispider.is_visited(url))
Пример #3
0
    def process_response(self, url_obj, flag, extract_url_list=None):
        """
        线程任务 response 回调函数:
            解析 HTML 源码,获取下一层 URLs 放入 checking_urls

        Args:
            extract_url_list: 返回抽取出的urls集合
            url_obj: 被下载页面所处的url链接对象
            flag: 页面下载具体情况的返回标志
                    - 0  : 表示下载成功且为非pattern页面
                    - 1  : 表示下载成功且为符合pattern的图片
                    - -1 : 表示页面下载失败
                    - 2  : depth >= max_depth 的非 target URL
        """
        # 多个线程可能同时访问 self.checking_urls, self.checked_urls 和 self.error_urls
        # 需要加锁
        if self.lock.acquire():
            if flag == -1:
                self.error_urls.add(url_obj)

            elif flag == 0:
                self.checked_urls.add(url_obj)
                for ex_url in extract_url_list:
                    next_url_obj = url_object.Url(ex_url,
                                                  int(url_obj.get_depth()) + 1)
                    if not self.is_url_visited(next_url_obj):
                        self.checking_urls.put(next_url_obj)

            elif flag == 1:
                self.checked_urls.add(url_obj)

            # Queue.task_done()函数向任务已经完成的队列发送一个信号
            # 可以理解为,每 task_done 一次,就从队列里删掉一个元素
            self.checking_urls.task_done()
        self.lock.release()
Пример #4
0
    def get_seed_url(self):
        """
        get seed url from seedUrlFile

        Returns:
            True / False : 存在种子文件返回True, 否则返回 False
        """
        if not os.path.isfile(self.url_list_file):
            logging.error(' * seedfile is not existing !!!')
            self.program_end('there is no seedfile !')
            return False

        with open(self.url_list_file, 'rb') as f:
            lines = f.readlines()

        for line in lines:
            if line.strip() == '':
                continue

            url_obj = url_object.Url(line.strip(), 0)
            self.checking_url.put(url_obj)
        return True
Пример #5
0
 def test_not_visited(self):
     """
     test False for func - is_visited()
     """
     url = url_object.Url("http://www.baidu.com")
     self.assertFalse(self.minispider.is_visited(url))