Exemplo n.º 1
0
    def task_newspage(self, grab, task):
        rubr = grab.doc.select('//h2[@id="navbar"]').text() #выделяем рубрику из хлебных крошек
        rubr = rubr.split(' ')[-1]
        if stop_list.find(rubr) == -1:
            news['url'] = task.url.replace('http://komionline.ru', '')
            news['rubr'] = rubrics_id(rubr, 'komionline')   #записыаем id рубрики
            news['title'] = clean_text(grab.doc.select('//h2[@class="title"]').text(),'normal')
            data = grab.doc.select('//p[@class="moreinfo"]').text()[:20]
            news['date'] = data.replace(',', '')
            text = grab.doc.select('//div[@class="text"]').html()
            news['text'] = clean_text(text,'normal')#очистка от спецсимволов
            news['text'] = pur.feed(news['text'])#очистка от тегов
            news['text'] = news['text'][news['text'].find('</h2>')+5:]#вырезаем заголовок из текста
            news['text'] = news['text'][:news['text'].rfind('<p>')]#вырезаем последний абзац
            news['text'] = copyright(news['text'], 'komionline')
            news['shingle_text'] = genshingle(text,10) #создаем шинглы текста
            news['shingle_title'] = genshingle(news['title'],2) #создаем шинглы тайтла

            net_povtora = True
            links, shingle_titles, shingle_texts = load_db_shingle(news['date'], 'komionline')
            temp_shin_text = json.loads(news['shingle_text'])
            temp_shin_title = json.loads(news['shingle_title'])
            for link, shingle_title, shingle_text in zip(links, shingle_titles, shingle_texts):
                if compaire(temp_shin_title,shingle_title) > 90 or compaire(temp_shin_text,shingle_text) > 60:
                    net_povtora = False                
            if net_povtora:
                news['anons'] = news['text'][news['text'].find('<p>')+3:news['text'].find('</p>')]  #выделение первого абзаца текста для анонса
                #скачивание изображений из статьи
                bn_img = grab.doc.select('//div[@id="printnews"]//img')
                news['img_anons'] = '' #обнуление объекта словаря
                img_text = []
                for i, elem in enumerate(bn_img):
                    if elem.attr('src'):
                        path_to_img_folder = create_img_folder(news['date'])
                        img_name = md5(elem.attr('src').split("/")[-1].encode('utf-8')).hexdigest()[:15] + '.' + elem.attr('src').split(".")[-1].lower()
                        new_link_to_img = path_to_img_folder + '/' + img_name
                        if not os.path.exists(new_link_to_img):
                            fix_link = urllib.parse.quote(elem.attr('src'))
                            yield Task('image', url=fix_link, priority=task.priority, path=new_link_to_img)
                        if i == 0:  #перавя картинка идет на анонс
                            img_anons_links.append(new_link_to_img) #добавляем ссылку для проверки на
                            #сохраняем в нужном формате cms instant
                
                            news['img_anons'] = new_link_to_img[new_link_to_img.find('media/')+6:]

                            img_text.append(urllib.parse.quote(elem.attr('src')) + ' ' + new_link_to_img)
                        else:
                            img_text.append(urllib.parse.quote(elem.attr('src')) + ' ' + new_link_to_img)

                #заменяем в тексте старые ссылки на картинки на новые-сгенерированные. Строим путь к папке как на сайту бедт
                if img_text:
                    for img in img_text:
                        link_images = img.split(' ')
                        news['text'] = news['text'].replace(link_images[0],'/media/' + link_images[1][link_images[1].find('media/')+6:])
                
                news['id_source'] = 3 #id источника парсинга - в данному случае комионлайн
                write_news_to_db(news) #Запись в базу
Exemplo n.º 2
0
    def task_newspage(self, grab, task):
        task.news['title'] = clean_text(grab.doc.select('//h2[@class="title"]').text(),'normal')
        task.news['date'] = data_change(grab.doc.select('//div[@class="date"]').text(), 'bnkomi')

        bn_text = grab.doc.select('//div[@class="cnt daGallery"]').html()
        #разобраться с подписью к фото - или выделить и уадлить абзац, либо заменить один класс на другой
        task.news['text'] = pur.feed(bn_text)   #очищаем от html тегов
        task.news['text'] = clean_text(task.news['text'],'normal')  #очищаем от юникод сиволов и пустых абзацев
        task.news['text'] = copyright(task.news['text'], 'bnkomi')
        task.news['text'] = re.sub(r'\s+', ' ', task.news['text']) #удаляем лишние пробелы
        
        task.news['shingle_text'] = genshingle(bn_text,10) #создаем шинглы текста
        task.news['shingle_title'] = genshingle(task.news['title'],2) #создаем шинглы тайтла

        #проверка на одинаковые статьи по заголовку и текстам
        net_povtora = True
        links, shingle_titles, shingle_texts = load_db_shingle(task.news['date'], 'bnkomi')
        temp_shin_text = json.loads(task.news['shingle_text'])
        temp_shin_title = json.loads(task.news['shingle_title'])
        for link, shingle_title, shingle_text in zip(links, shingle_titles, shingle_texts):
            if compaire(temp_shin_title,shingle_title) > 90 or compaire(temp_shin_text,shingle_text) > 60:
                net_povtora = False                
        if net_povtora:
            task.news['anons'] = task.news['text'][task.news['text'].find('<p>')+3:task.news['text'].find('</p>')]  #выделение первого абзаца текста для анонса

            #скачивание изображений из статьи
            bn_img = grab.doc.select('//div[@class="cnt daGallery"]//img')
            task.news['img_anons'] = '' #обнуление объекта словаря
            img_text = []
            for i, elem in enumerate(bn_img):
                if elem.attr('src'):
                    path_to_img_folder = create_img_folder(task.news['date'])
                    img_name = md5(elem.attr('src').split("/")[-1].encode('utf-8')).hexdigest()[:15] + '.' + elem.attr('src').split(".")[-1].lower()
                    new_link_to_img = path_to_img_folder + '/' + img_name
                    if not os.path.exists(new_link_to_img):
                        fix_link = urllib.parse.quote(elem.attr('src'))#если в названиии файла пробел
                        yield Task('image', url=fix_link, priority=task.priority, path=new_link_to_img)
                    if i == 0:  #перавя картинка идет на анонс
                        img_anons_links.append(new_link_to_img) #добавляем ссылку для проверки на 
                        
                        task.news['img_anons'] = new_link_to_img[new_link_to_img.find('media/')+6:]

                        img_text.append(urllib.parse.quote(elem.attr('src')) + ' ' + new_link_to_img)
                    else:
                        img_text.append(urllib.parse.quote(elem.attr('src')) + ' ' + new_link_to_img)

            #заменяем в тексте старые ссылки на картинки на новые-сгенерированные. Строим путь к папке как на сайту бедт
            if img_text:
                for img in img_text:
                    link_images = img.split(' ')
                    task.news['text'] = task.news['text'].replace(link_images[0],'/media/' + link_images[1][link_images[1].find('media/')+6:])
            
            task.news['id_source'] = 2 #id источника парсинга - в данному случае бнкоми
            write_news_to_db(task.news) #Запись в базу
Exemplo n.º 3
0
    def task_page(self, grab, task):
        print(task.url)
        #task.event['title']
        titles = grab.doc.select(
            '//ul[@id="afisha"]/li/p/span[@class="title"]')
        dates_event = grab.doc.select(
            '//ul[@id="afisha"]/li/p/span[@class="date"]')
        images = grab.doc.select('//ul[@id="afisha"]/li/img')
        contents = grab.doc.select('//ul[@id="afisha"]/li/a')

        for title, date_event, img, content in zip(titles, dates_event, images,
                                                   contents):
            title = clean_text(title.text(), 'normal')

            try:
                month_test = clean_text(date_event.text(),
                                        'normal').split(' ')[1]
                month_test = month_list[month_test]
            except:
                month_test = False

            date = clean_text(date_event.text(), 'normal')[:-6]
            time = clean_text(date_event.text(),
                              'normal')[-5:].replace('.', ':')
            content = clean_text(content.text(), 'normal')

            year = task.url.split('/')[-3]
            date = date.split(' ')[0].split('-')

            try:
                int(date[0])
                integ = True
            except:
                integ = False

            if integ and month_test:
                startdata = datetime.date(int(year), int(month_test),
                                          int(date[0]))

                if img.attr('src'):
                    path_to_img_folder = create_img_folder(
                        date=startdata.strftime("%Y-%m-%d"), type='event')
                    img_name = md5(
                        img.attr('src').split("/")[-1].encode(
                            'utf-8')).hexdigest()[:15] + '.' + img.attr(
                                'src').split(".")[-1].lower()
                    new_link_to_img = path_to_img_folder + '/' + img_name
                    if not os.path.exists(new_link_to_img):
                        fix_link = urllib.parse.quote(img.attr('src'))
                        yield Task('image',
                                   url=fix_link,
                                   priority=task.priority,
                                   path=path_to_img_folder,
                                   name_img=img_name)
                if exist_date_event.count(startdata.strftime("%Y-%m-%d")):
                    print(startdata.strftime("%Y-%m-%d") + ' уже есть')
                else:
                    if len(date) == 2:
                        for i in range(int(date[1]) - int(date[0]) + 1):
                            startdata = datetime.date(int(year),
                                                      int(month_test),
                                                      int(date[0]) + i)
                            event = {
                                'name':
                                title,
                                'date':
                                startdata.strftime("%Y-%m-%d"),
                                'time':
                                time,
                                'type_event':
                                'koncert',
                                'type_film':
                                '',
                                'price':
                                0,
                                'source_id':
                                7,  #филармония
                                'description':
                                content,
                                'poster':
                                new_link_to_img[new_link_to_img.find('/media/'
                                                                     ) + 7:]
                            }
                            write_event_to_db(event)

                    else:
                        startdata = datetime.date(int(year), int(month_test),
                                                  int(date[0]))
                        event = {
                            'name':
                            title,
                            'date':
                            startdata.strftime("%Y-%m-%d"),
                            'time':
                            time,
                            'type_event':
                            'koncert',
                            'type_film':
                            '',
                            'price':
                            0,
                            'source_id':
                            7,  #филармония
                            'description':
                            content,
                            'poster':
                            new_link_to_img[new_link_to_img.find('/media/') +
                                            7:]
                        }
                        write_event_to_db(event)
Exemplo n.º 4
0
    def task_newspage(self, grab, task):
        task.news['title'] = clean_text(
            grab.doc.select('//h1').text(), 'normal')
        task.news['date'] = data_change(
            grab.doc.select('//div[@class="addDate"]').text(), 'komiinform')

        ki_text = grab.doc.select('//div[@class="daGallery"][2]').html()

        lll = grab.doc.select(
            '//div[@class="daGallery"][1]/div[@class="newsImage"]/a')

        task.news['link_anons_img'] = ''
        if lll:
            task.news['link_anons_img'] = lll.attr('href')

        #выделяем текст из новости по признаку абзацев - ищем первый <p> и последний </p> и делаем срез
        ki_text = ki_text[ki_text.find('<p'):ki_text.rfind('</p>') + 4]

        task.news['shingle_text'] = genshingle(ki_text,
                                               10)  #создаем шинглы текста
        task.news['shingle_title'] = genshingle(task.news['title'],
                                                2)  #создаем шинглы тайтла

        ki_text = pur.feed(ki_text)  #очищаем от html тегов
        task.news['text'] = clean_text(
            ki_text, 'normal')  #очищаем от юникод сиволов и пустых абзацев
        task.news['text'] = task.news['text'].strip().replace("'", "")
        ki_img_anons_text = grab.doc.select(
            '//div[@class="daGallery"][1]/div[@class="newsImage"]/div'
        )  # подпись к фото, загоняем в подвал к копирайту
        if ki_img_anons_text:
            task.news['text'] = task.news[
                'text'] + '<p style="text-align:right;">' + ki_img_anons_text.text(
                ) + '</p>'
        task.news['text'] = copyright(task.news['text'], 'komiinform')

        #скачивание картинки анонса
        task.news['img_anons'] = ''  #обнуление объекта словаря
        link_anons_img = task.news[
            'link_anons_img']  #обнуление переменной для записи ссылки на картинку-анонс

        if link_anons_img:
            path_to_img_folder = create_img_folder(task.news['date'])
            img_name = md5(link_anons_img.split("/")[-1].encode(
                'utf-8')).hexdigest()[:15] + '.' + link_anons_img.split(
                    ".")[-1].lower()  #преобразуем имя файла картинки в хеш
            download_link_img_anons = path_to_img_folder + '/' + img_name
            #сохраняем в нужном формате cms instant
            img_anons_links.append(
                download_link_img_anons)  #добавляем ссылку для проверки на

            task.news['img_anons'] = download_link_img_anons[
                download_link_img_anons.find('media/') + 6:]

            if not os.path.exists(download_link_img_anons):
                #передаем в очередь путь к папке и имя файла сгенерированное
                yield Task('image',
                           url=link_anons_img,
                           priority=task.priority,
                           path=download_link_img_anons)

        #скачивание картинок из тела статьи
        mayby_img = grab.doc.select('//div[@class="daGallery"][2]//img')
        img_text = []
        for elem in mayby_img:
            if elem.attr('src'):
                if elem.attr('src').count('loginza') == 0 and elem.attr(
                        'src').count('_sm') == 0:
                    path_to_img_folder = create_img_folder(task.news['date'])
                    img_name = md5(
                        elem.attr('src').split("/")[-1].encode(
                            'utf-8')).hexdigest()[:15] + '.' + elem.attr(
                                'src').split(".")[-1].lower()
                    new_link_to_img = path_to_img_folder + '/' + img_name
                    img_text.append(elem.attr('src') + ' ' + new_link_to_img)
                    if not os.path.exists(new_link_to_img):
                        yield Task('image',
                                   url=elem.attr('src'),
                                   priority=task.priority,
                                   path=new_link_to_img)

        #заменяем в тексте старые ссылки на картинки на новые-сгенерированные
        if img_text:
            for img in img_text:
                link_images = img.split(' ')
                task.news['text'] = task.news['text'].replace(
                    link_images[0], '/media/' +
                    link_images[1][link_images[1].find('media/') + 6:])

        task.news[
            'id_source'] = 1  #id источника парсинга - в данному случае комиинформ
        write_news_to_db(task.news)  #Запись в базу
Exemplo n.º 5
0
    def task_page(self, grab, task):
        title = grab.doc.select('//h3')
        ganre = grab.doc.select('//p[@class="fp_header-genre"]')
        try:
            limit = grab.doc.select('//h3/span[@class="fp_header-age"]').text()
        except:
            limit = ''

        title = title.text().replace(limit, '')
        poster = grab.doc.select(
            '//div[@class="col-sm-6 film_page-poster-big hidden-xs"]/img')

        info = grab.doc.select(
            '//div[@class="film_page-film-data col-sm-6 col-xs-12"]/p')
        try:
            descr = grab.doc.select(
                '//div[@class="film_page-film-data col-sm-6 col-xs-12"]/div[2]/p'
            ).text()
        except:
            descr = grab.doc.select(
                '//div[@class="film_page-film-data col-sm-6 col-xs-12"]/div[1]/p'
            ).text()
        #images = grab.doc.select('//div[@class="fp-shots-grid"]/a')

        description = ''
        for i in info:
            description += i.text().replace("'", " ") + '\n'
        description += clean_text(descr.replace("'", " "), 'normal')

        if poster.attr('src'):
            path_to_img_folder = create_img_folder(
                date=date_now.strftime("%Y-%m-%d"), type='event')
            img_name = md5(
                poster.attr('src').split("/")[-1].encode('utf-8')).hexdigest(
                )[:15] + '.' + poster.attr('src').split(".")[-1].lower()
            new_link_to_img = path_to_img_folder + '/' + img_name
            if not os.path.exists(new_link_to_img):
                fix_link = urllib.parse.quote(poster.attr('src'))
                yield Task('image',
                           url=fix_link,
                           priority=task.priority,
                           path=path_to_img_folder,
                           name_img=img_name)
            poster = new_link_to_img[new_link_to_img.find('/media/') + 7:]
        '''
        imgs = []
        for im in images:
            if im.attr('href'):
                path_to_img_folder = create_img_folder(date_now.strftime("%Y-%m-%d"))
                img_name = md5(im.attr('href').split("/")[-1].encode('utf-8')).hexdigest()[:15] + '.' + im.attr('href').split(".")[-1].lower()
                new_link_to_img = path_to_img_folder + '//' + img_name
                if not os.path.exists(new_link_to_img):
                    fix_link = urllib.parse.quote(im.attr('href'))
                    yield Task('image', url=fix_link, priority=task.priority, path=path_to_img_folder, name_img=img_name)
                    imgs.append(new_link_to_img)

        for img in imgs:
            description += img
        '''

        event = {
            'title': title.replace("'", ''),
            'description': description,
            'event_type': 1,
            'ganre': ganre.text().replace(' .', ','),
            'limit_year': limit,
            'poster': poster,
            'url': task.url
        }
        write_core_event_to_db(event)