예제 #1
0
    def get_app_from_link(self):
        uid = int(re.search(r'\d+', self.link).group())
        start_page = requests.get(self.link)
        parser = Parser(start_page, uid)
        app = parser.parse()

        if app is 0:
            return 0

        return app
예제 #2
0
class ParserTests(unittest.TestCase):
    def setUp(self):
        self.__parser = Parser()

    def test_empty(self):
        result = self.__parser.parse('')
        self.assertEqual(len(result), 0)

    def test_sample_page(self):
        with codecs.open(os.path.join(os.path.dirname(__file__), 'vdm_sample.html'), 'r', 'utf-8') as f:
            data = f.read()
        result = self.__parser.parse(data)

        self.assertEqual(len(result), 13)

        post = result[0]
        self.assertEqual(post.author, 'Jbln!')
        self.assertEqual(post.date, datetime(2016, 1, 9, 16, 33, tzinfo = tz.gettz('Europe/Paris')))
        self.assertEqual(post.content, "Aujourd'hui, je reçois une lettre d'invitation à un mariage ! Celui de ma \"meilleure\" amie qui m'a piqué mon mec lorsque que je l'ai accueillie chez moi après une de ses ruptures. Petit plus, elle me demande d'être une de ses demoiselles d'honneur. VDM")

        post = result[1]
        self.assertEqual(post.author, 'ivegotnomoney')
        self.assertEqual(post.date, datetime(2016, 1, 9, 14, 12, tzinfo = tz.gettz('Europe/Paris')))
        self.assertEqual(post.content, "Aujourd'hui, comme depuis des années maintenant, mes parents tiennent toujours à la règle de \"celui qui obtient la fève rembourse la galette des rois\". Étant en repas de famille nombreuse, il y a donc trois galettes. J'ai eu les trois fèves et je suis une étudiante avec un budget très serré. VDM")
예제 #3
0
class FarsroidDataCrawler(BaseCrawler):
    def __init__(self, mode):
        self.mode = mode
        self.store = self._set_orm()
        self.parser = Parser()
        self.links = self._set_links()

    def _set_orm(self):
        if self.mode == 'app':
            return AppData()
        if self.mode == 'game':
            return GameData()

    def _set_links(self):
        if self.mode == 'app':
            return AppLink.load_links()
        if self.mode == 'game':
            return GameLink.load_links()

    def data_crawler(self, links, index_thread):
        while links.qsize():
            link = links.get()

            response = self.get(link)

            if response is not None:
                data = self.parser.parse(response, link, self.mode)

                if data is not None:
                    app_data = data[0]
                    count = data[1]

                    print(f'Thread: {index_thread}\t|\t'
                          f'Link: {link}\t|\t'
                          f'Count: {count}\t|\t')

                    self.store.save_app(app_data)
                    links.task_done()

                else:
                    links.task_done()
            else:
                links.task_done()

    def run_crawler(self):
        threads = list()

        links_queue = Queue()

        for link in self.links:
            links_queue.put(link.link)

        for t in range(1, 21):
            thread = Thread(target=self.data_crawler, args=(links_queue, t))
            threads.append(thread)
            thread.start()

        for thread in threads:
            thread.join()

        print('All Task Done...')