Example #1
0
File: irr.py Project: sunnmas/dorus
    def parse_item(self, response):
    # def parse(self, response):
        print('------------------------------'+str(response.status)+'----------------------------------')
        print(response.url)
        item = ItemLoader(item=Ad(), response=response)

        actual = response.css('div[class="productPage__unactiveBlockTitle"]::text').get()
        if actual == 'Объявление снято с публикации':
            actual = False
            item.add_value('actual', False)
        else:
            actual = True
            item.add_value('actual', True)
        adv = re.search("product\['listingParams'\] = {.+?}", response.text).group(0)
        adv = json.loads(adv.replace("product['listingParams'] = ",''))
        item.add_value('provider',  'irr')
        id = response.css('.js-advertId::attr(value)').get()
        item.add_value('external_id', id)
        item.add_value('date', adv['date_create'])
        title = response.css('.productPage__title::text').get()
        title = title.replace("(другое)",'')
        item.add_value('title', title)
        item.add_value('description', adv['text'])
        item.add_css('price', '.productPage__price::attr(content)')
        item.add_css('price_unit', '.productPage__price::attr(content)')
        item.add_css('address', '.js-scrollToMap::text')
        item.add_css('address', '.productPage__metro::text')
        
        try:
            coordinates = response.css('.js-productPageMap::attr(data-map-info)').get()
            coordinates = json.loads(coordinates)
            item.add_value('lattitude', coordinates['lat'])
            item.add_value('longitude', coordinates['lng'])
        except BaseException:
            print('coords not found')
            item.add_value('lattitude', '0')
            item.add_value('longitude', '0')
        images = ','.join(response.css('.lineGallery img::attr(data-src)').getall()[:10])
        item.add_value('images', images)
        item.add_value('videos', '')
        try:
            site = response.css('.productPage__infoTextBold a::attr(href)').get().replace('?utm_source=irr','')
            if 'irr.ru' in site:
                site = ''
        except BaseException:
            site = ''
        item.add_value('site', site)

        author_external_id = re.search("var advert_user_id = '.+?';", response.text).group(0)
        author_external_id = author_external_id.replace("var advert_user_id = '",'').replace("';",'')
        author_external_id = base64.b64decode(author_external_id).decode("utf-8")
        item.add_value('author_external_id', author_external_id)

        if actual == True:
            item.add_css('author', '.productPage__inlineWrapper a::text')
            item.add_css('author', '.productPage__infoTextBold.productPage__infoTextBold_inline::text')
            item.add_css('author', 'input[name="contactFace"]::attr(value)')
            # item.add_value('author', 'Нет имени')

            phone = response.css('input[name="phoneBase64"]::attr(value)').get()
            phone = base64.b64decode(phone).decode("utf-8").replace('(','').replace(')','').replace('-','').replace(' ','')
            item.add_value('phone', phone)
        else:
            item.add_value('author', 'Unknown')
            item.add_value('phone', 'None')
        item.add_value('company', False)
        url = response.url
        self.draft_category = re.search("irr.ru/.*?/.*?/", url).group(0)[0:-1].replace('irr.ru/','').replace('/','::')
        details = response.css('.productPage__infoColumnBlockText::text').getall()
        details = self.parse_details(details, title, response.url)
        item.add_value('details', details)

        category = self.draft_category.replace('real-estate::apartments-sale', 'Квартиры, комнаты')
        category = category.replace('real-estate::rooms-sale', 'Квартиры, комнаты')
        category = category.replace('real-estate::rooms-rent', 'Квартиры, комнаты')
        category = category.replace('real-estate::rent', 'Квартиры, комнаты')
        category = category.replace('real-estate::commercial-sale', 'Коммерческая недвижимость')
        category = category.replace('real-estate::commercial', 'Коммерческая недвижимость')
        if category == 'real-estate::out-of-town-rent':
            if "real-estate/out-of-town-rent/lands" in url:
                category = category.replace('real-estate::out-of-town-rent', 'Земельные участки')
            else:
                category = category.replace('real-estate::out-of-town-rent', 'Дома, дачи, коттеджи')
        if category == 'real-estate::out-of-town':
            if "real-estate/out-of-town/lands" in url:
                category = category.replace('real-estate::out-of-town', 'Земельные участки')
            else:
                category = category.replace('real-estate::out-of-town', 'Дома, дачи, коттеджи')
        category = category.replace('real-estate::out-of-town', 'Дома, дачи, коттеджи')
        category = category.replace('real-estate::garage-rent', 'Гаражи и машиноместа')
        category = category.replace('real-estate::garage', 'Гаражи и машиноместа')
        category = category.replace('cars::passenger', 'Автомобили')
        category = category.replace('cars::misc', 'Мототехника')
        category = category.replace('cars::water', 'Водный транспорт')
        category = category.replace('cars::commercial', 'Спецтехника')
        category = category.replace('cars::parts', 'Запчасти для авто')

        category = category.replace('home::garden', 'Сад и огород, дача')
        if category == 'home::furniture-interior':
            if re.search('kitchen', url) != None:
                category = 'Посуда и товары для кухни'
            category = category.replace('home::furniture-interior', 'Мебель и интерьер')
        if category == 'home::building':
            if re.search('instruments', url) != None:
                category = 'Инструменты'
            elif re.search('materials', url) != None:
                category = 'Ремонт и строительство'
            elif re.search('plumbing', url) != None:
                category = 'Ремонт и строительство'
            elif re.search('other', url) != None:
                category = 'Ремонт и строительство'
            elif re.search('constructions', url) != None:
                category = 'Ремонт и строительство'
            elif re.search('elements', url) != None:
                category = 'Ремонт и строительство'

        category = category.replace('animals-plants::plants', 'Растения')
        category = category.replace('business::food', 'Продукты питания')
        category = category.replace('business::business', 'Готовый бизнес')
        category = category.replace('business::services-business', 'Услуги')
        category = category.replace('business::equipment', 'Оборудование для бизнеса')
        category = category.replace('jobs-education::resumes', 'Резюме')
        category = category.replace('jobs-education::vacancies', 'Вакансии')
        category = category.replace('electronics-technics::tv-audio-dvd', 'Аудио и видео техника')
        category = category.replace('electronics-technics::photo', 'Фототехника')
        category = category.replace('electronics-technics::computers-devices', 'Компьютеры и пр.')
        category = category.replace('electronics-technics::games', 'Игры и приставки')
        category = category.replace('electronics-technics::kitchen', 'Бытовая техника')
        category = category.replace('electronics-technics::vacuum', 'Бытовая техника')
        category = category.replace('electronics-technics::washing-machines', 'Бытовая техника')
        category = category.replace('electronics-technics::ironing-sewing-equipment', 'Бытовая техника')
        category = category.replace('electronics-technics::climatic-technics', 'Бытовая техника')
        item.add_value('category', category)

        item.add_value('original_url', url)
        item.add_value('created_at', 'now')
        item.add_value('processed', False)
        print('======================================================')
        return item.load_item()
Example #2
0
    def parse_item(self, response):
        print(response.url)
        item = ItemLoader(item=Ad(), response=response)
        item.add_value('provider', 'cmlt')
        item.add_value(
            'external_id',
            re.search('ad-.\d+', response.url).group(0).replace('ad-', ''))
        try:
            date = response.xpath(
                '////div[@class="full-an-info"]//div[@class="an-history-header"]/preceding-sibling::div/text()'
            ).get().replace('\n', '')
        except BaseException:
            date = response.xpath(
                '////div[@class="full-an-info"]/div[@class="fullAn"]/div[contains(@class, "view-an")]/following-sibling::div/text()'
            ).get().replace('\n', '')
        item.add_value('date', date)
        item.add_value('title',
                       response.css('h1::text').get().replace('\n', ''))
        item.add_value(
            'description', ''.join(
                response.css('div.full-an-info div.view-an.content-block::text'
                             ).getall()).replace('\n', ''))
        try:
            item.add_value(
                'price',
                response.css('tr.fullAn-price div::text').get().replace(
                    'руб.', '').replace('\n', '').replace('\xa0',
                                                          '').replace(' ', ''))
        except BaseException:
            item.add_value('price', 0)
        item.add_value(
            'address',
            response.css(
                'div.location .an_property_value::text').get().replace(
                    '\n', ''))

        coordinates = re.search('center: \[\d+.?\d+, \d+.\d+]',
                                response.text).group(0)
        coordinates = coordinates.replace('center: [', '').replace(']', '')
        coordinates = coordinates.split(', ')
        item.add_value('lattitude', coordinates[0])
        item.add_value('longitude', coordinates[1])
        item.add_value(
            'ext_category',
            response.xpath(
                '////select[@id="sam-select2"]/option[@selected="selected"]/text()'
            ).get().replace('\n', ''))
        images = ','.join(response.css('a.image::attr(href)').getall())
        item.add_value('images', images)
        item.add_value('videos', '')
        item.add_value('site', '')
        item.add_value('details', '')
        author_url = response.css(
            'div.an-page-other-user-ans a::attr(href)').get()
        print("URL автора: https://cmlt.ru" + author_url)
        r = requests.get('https://www.cmlt.ru' + author_url).text
        author_external_id = re.search('type="hidden" name="cid" value="\d+?"',
                                       r).group(0).replace(
                                           'type="hidden" name="cid" value="',
                                           '').replace('"', '')
        item.add_value('author_external_id', author_external_id)
        try:
            author = re.search('<title>.+? — ',
                               r).group(0).replace('<title>Объявления автора ',
                                                   '').replace(' — ', '')
            author = author.replace('<title>Объявления выбранного автора',
                                    '').replace(
                                        '<title>Объявления организации ', '')
        except BaseException:
            author = re.search(
                'id="shop-name" class="userstyle_name">.+?</div>').group(
                    0).replace('id="shop-name" class="userstyle_name">',
                               '').replace('</div>', '')
        item.add_value('author', author)
        item.add_value(
            'phone',
            response.css('span.an-contact-phone::text').get().replace(
                '\n', '').replace('-', '')[1:])
        item.add_value('original_url', response.url[20:])
        item.add_value('created_at', 'now')
        item.add_value('processed', False)
        print('======================================================')
        print(item)

        return item.load_item()
Example #3
0
    def parse_item(self, response):
        # def parse(self, response):
        print('------------------------------' + str(response.status) +
              '----------------------------------')
        print(response.url)
        item = ItemLoader(item=Ad(), response=response)
        item.add_value('provider', 'rydo')

        # actual = response.css('div[class="productPage__unactiveBlockTitle"]::text').get()
        # if actual == 'Объявление снято с публикации':
        #     actual = False
        #     item.add_value('actual', False)
        # else:
        #     actual = True
        #     item.add_value('actual', True)
        item.add_css('external_id', 'input[name="item_id"]::attr(value)')
        date = response.css(
            '.my-breakpoint .my-detail-listview-box li::text').getall()[-1]
        date = date.replace('января',
                            'Jan').replace('февраля',
                                           'Feb').replace('марта', 'Mar')
        date = date.replace('апреля',
                            'Apr').replace('мая',
                                           'May').replace('июня', 'Jun')
        date = date.replace('июля',
                            'Jul').replace('августа',
                                           'Aug').replace('сентября', 'Sep')
        date = date.replace('октября',
                            'Oct').replace('ноября',
                                           'Nov').replace('декабря', 'Dec')
        date = datetime.datetime.strptime(
            date, ' Опубликовано %d %b %Y г. %H:%M').strftime('%Y-%m-%d')
        item.add_value('date', date)
        title = response.css('h1.detail_title::text').get()
        title = title[0:-4]
        item.add_value('title', title)
        item.add_css('description', '.detailprops p::text')
        item.add_css('price', 'h1 .price::text')
        item.add_css('address', 'h1 .city::text')
        # item.add_css('price_unit', '.productPage__price::attr(content)')

        try:
            coordinates = re.search("center: \[\d+.\d+,\d+.\d+]",
                                    response.text).group(0)
            coordinates = coordinates.replace('center: [', '').replace(']', '')
            coordinates = coordinates.split(',')
            item.add_value('lattitude', coordinates[0])
            item.add_value('longitude', coordinates[1])
        except BaseException:
            print('coords not found')
            item.add_value('lattitude', '0')
            item.add_value('longitude', '0')
        # images = ','.join(response.css('.lineGallery img::attr(data-src)').getall()[:10])
        # item.add_value('images', images)
        item.add_value('videos', '')

        # if actual == True:
        #     item.add_css('author', '.productPage__inlineWrapper a::text')
        #     item.add_css('author', '.productPage__infoTextBold.productPage__infoTextBold_inline::text')
        #     item.add_css('author', 'input[name="contactFace"]::attr(value)')
        #     # item.add_value('author', 'Нет имени')

        #     phone = response.css('input[name="phoneBase64"]::attr(value)').get()
        #     phone = base64.b64decode(phone).decode("utf-8").replace('(','').replace(')','').replace('-','').replace(' ','')
        #     item.add_value('phone', phone)
        # else:
        #     item.add_value('author', 'Unknown')
        #     item.add_value('phone', 'None')
        # item.add_value('company', False)
        url = response.url
        self.draft_category = re.search("rydo.ru/.*?/.*?/",
                                        url).group(0).replace('rydo.ru/', '')
        self.draft_category = re.search("/.*?/",
                                        self.draft_category).group(0).replace(
                                            '/', '')
        # details = response.css('.productPage__infoColumnBlockText::text').getall()
        # details = self.parse_details(details, title, response.url)
        # item.add_value('details', details)

        try:
            if re.search("auto-", self.draft_category).group(0) != None:
                category = 'Автомобили'
        except BaseException:
            None
        if self.draft_category == 'moto':
            category = 'Мототехника'
        # category = category.replace('real-estate::rooms-sale', 'Квартиры, комнаты')
        # category = category.replace('real-estate::rooms-rent', 'Квартиры, комнаты')
        # category = category.replace('real-estate::rent', 'Квартиры, комнаты')
        # category = category.replace('real-estate::commercial-sale', 'Коммерческая недвижимость')
        # category = category.replace('real-estate::commercial', 'Коммерческая недвижимость')
        # if category == 'real-estate::out-of-town-rent':
        #     if "real-estate/out-of-town-rent/lands" in url:
        #         category = category.replace('real-estate::out-of-town-rent', 'Земельные участки')
        #     else:
        #         category = category.replace('real-estate::out-of-town-rent', 'Дома, дачи, коттеджи')
        # if category == 'real-estate::out-of-town':
        #     if "real-estate/out-of-town/lands" in url:
        #         category = category.replace('real-estate::out-of-town', 'Земельные участки')
        #     else:
        #         category = category.replace('real-estate::out-of-town', 'Дома, дачи, коттеджи')
        # category = category.replace('real-estate::out-of-town', 'Дома, дачи, коттеджи')
        # category = category.replace('real-estate::garage-rent', 'Гаражи и машиноместа')
        # category = category.replace('real-estate::garage', 'Гаражи и машиноместа')
        # category = category.replace('cars::passenger', 'Автомобили')
        # category = category.replace('cars::misc', 'Мототехника')
        # category = category.replace('cars::water', 'Водный транспорт')
        # category = category.replace('cars::commercial', 'Спецтехника')
        # category = category.replace('cars::parts', 'Запчасти для авто')

        # category = category.replace('home::garden', 'Сад и огород, дача')
        # if category == 'home::furniture-interior':
        #     if re.search('kitchen', url) != None:
        #         category = 'Посуда и товары для кухни'
        #     category = category.replace('home::furniture-interior', 'Мебель и интерьер')
        # if category == 'home::building':
        #     if re.search('instruments', url) != None:
        #         category = 'Инструменты'
        #     elif re.search('materials', url) != None:
        #         category = 'Ремонт и строительство'
        #     elif re.search('plumbing', url) != None:
        #         category = 'Ремонт и строительство'
        #     elif re.search('other', url) != None:
        #         category = 'Ремонт и строительство'
        #     elif re.search('constructions', url) != None:
        #         category = 'Ремонт и строительство'
        #     elif re.search('elements', url) != None:
        #         category = 'Ремонт и строительство'

        # category = category.replace('animals-plants::plants', 'Растения')
        # category = category.replace('business::food', 'Продукты питания')
        # category = category.replace('business::business', 'Готовый бизнес')
        # category = category.replace('business::services-business', 'Услуги')
        # category = category.replace('business::equipment', 'Оборудование для бизнеса')
        # category = category.replace('jobs-education::resumes', 'Резюме')
        # category = category.replace('jobs-education::vacancies', 'Вакансии')
        # category = category.replace('electronics-technics::tv-audio-dvd', 'Аудио и видео техника')
        # category = category.replace('electronics-technics::photo', 'Фототехника')
        # category = category.replace('electronics-technics::computers-devices', 'Компьютеры и пр.')
        # category = category.replace('electronics-technics::games', 'Игры и приставки')
        # category = category.replace('electronics-technics::kitchen', 'Бытовая техника')
        # category = category.replace('electronics-technics::vacuum', 'Бытовая техника')
        # category = category.replace('electronics-technics::washing-machines', 'Бытовая техника')
        # category = category.replace('electronics-technics::ironing-sewing-equipment', 'Бытовая техника')
        # category = category.replace('electronics-technics::climatic-technics', 'Бытовая техника')
        item.add_value('category', category)
        print(url + '/get_phone/')

        phone = requests.get(url + '/get_phone/', data={})
        print('                           ' + str(phone.status_code))
        ph = phone.text
        if phone.status_code != 200 or ph == 'номер телефона не подтвержден':
            ph = 'None'
            print('Телефон не скачан')

        item.add_value('phone', ph)
        item.add_value('author', 'Нет имени')
        item.add_value('author_external_id', ph)

        item.add_value('original_url', url)
        item.add_value('created_at', 'now')
        item.add_value('processed', False)
        print('======================================================')
        return item.load_item()
Example #4
0
    def parse_item(self, response):
        # def parse(self, response):
        print(
            '----------------------------------------------------------------')
        print(response.url)
        item = ItemLoader(item=Ad(), response=response)

        item.add_value('provider', 'cian')
        actual = response.css(
            'div[class*="--offer_card_page-top--"]>div[class*="--container--"]::text'
        ).get()
        if actual == 'Объявление снято с публикации':
            item.add_value('actual', False)
        else:
            item.add_value('actual', True)

        id = re.search("/\d+/", response.url).group(0).replace('/', '')
        item.add_value('external_id', id)

        date = response.css('div[class*="--container--"]::text').get()
        try:
            date = date.replace('янв,',
                                'Jan').replace('фев,',
                                               'Feb').replace('мар,', 'Mar')
            date = date.replace('апр,',
                                'Apr').replace('мая,',
                                               'May').replace('июня,', 'Jun')
            date = date.replace('июля,',
                                'Jul').replace('авг,',
                                               'Aug').replace('сент,', 'Sep')
            date = date.replace('окт,',
                                'Oct').replace('нояб,',
                                               'Nov').replace('дек,', 'Dec')
            date = str(datetime.datetime.now().year
                       ) + '-' + datetime.datetime.strptime(
                           date, '%d %b %H:%M').strftime('%m-%d')
            item.add_value('date', date)
        except BaseException:
            item.add_css('date', 'div[class*="--container--"]::text')
        item.add_css('title', 'h1::text')
        description = "\x0d".join(
            response.css('p[class*="--description-text--"]::text').getall())
        item.add_value('description', description)
        item.add_css('price', 'span[class*="--price_value--"] span::text')
        item.add_css('price_unit', 'span[class*="--price_value--"] span::text')
        address = ', '.join(
            response.css('address[class*="--address--"] a::text').getall())
        item.add_value('address', address)

        try:
            coordinates = re.search("center=\d+.\d+,\d+.\d+",
                                    response.text).group(0).replace(
                                        'center=', '')
            coordinates = coordinates.split(',')
            item.add_value('lattitude', coordinates[0])
            item.add_value('longitude', coordinates[1])
        except BaseException:
            try:
                coordinates = re.search("center=\d+.\d+%2C\d+.\d+",
                                        response.text).group(0).replace(
                                            'center=', '')
                coordinates = coordinates.split('%2C')
                item.add_value('lattitude', coordinates[0])
                item.add_value('longitude', coordinates[1])
            except BaseException:
                print('coords not found')
                item.add_value('lattitude', '0')
                item.add_value('longitude', '0')

        images = ','.join(
            re.findall('"fullUrl":"https:\\\\[\w\\\\.\d-]+.jpg',
                       response.text)[:10]).replace('"fullUrl":"', '').replace(
                           '\\u002F', '/')
        item.add_value('images', images)
        item.add_value('videos', '')
        item.add_value('site', '')
        author_external_id = re.search('"ownerCianId":\d+',
                                       response.text).group(0).replace(
                                           '"ownerCianId":', '')
        item.add_value('author_external_id', author_external_id)
        author = response.css('h2[class*="--title--"]::text').get()
        if re.search(author_external_id, author) != None:
            item.add_value('author', 'Нет имени')
        else:
            item.add_css('author', 'h2[class*="--title--"]::text')

        if response.css('span[class*="--tag-pro--"]::text').get() == 'Pro':
            item.add_value('company', True)
        else:
            item.add_value('company', False)

        phone = re.search('\+7\d+', response.text).group(0)
        item.add_value('phone', phone)
        url = response.url
        draft_category = re.search('"category":".+?"',
                                   response.text).group(0).replace(
                                       '"category":"', '').replace('"', '')

        category = draft_category.replace('flatSale', 'Квартиры, комнаты')
        category = category.replace('flatRent', 'Квартиры, комнаты')
        category = category.replace('roomSale', 'Квартиры, комнаты')
        category = category.replace('roomRent', 'Квартиры, комнаты')
        category = category.replace('newBuildingFlatSale', 'Квартиры, комнаты')
        category = category.replace('landSale', 'Земельные участки')
        category = category.replace('landRent', 'Земельные участки')
        category = category.replace('houseShareSale', 'Дома, дачи, коттеджи')
        category = category.replace('houseSale', 'Дома, дачи, коттеджи')
        category = category.replace('houseRent', 'Дома, дачи, коттеджи')
        category = category.replace('cottageRent', 'Дома, дачи, коттеджи')
        category = category.replace('cottageSale', 'Дома, дачи, коттеджи')
        category = category.replace('warehouseSale',
                                    'Коммерческая недвижимость')
        category = category.replace('warehouseRent',
                                    'Коммерческая недвижимость')
        category = category.replace('officeSale', 'Коммерческая недвижимость')
        category = category.replace('officeRent', 'Коммерческая недвижимость')
        category = category.replace('shoppingAreaSale',
                                    'Коммерческая недвижимость')
        category = category.replace('shoppingAreaRent',
                                    'Коммерческая недвижимость')
        category = category.replace('freeAppointmentObjectSale',
                                    'Коммерческая недвижимость')
        category = category.replace('freeAppointmentObjectRent',
                                    'Коммерческая недвижимость')
        category = category.replace('garageSale', 'Гаражи и машиноместа')
        category = category.replace('garageRent', 'Гаражи и машиноместа')
        item.add_value('category', category)

        details = self.parse_details(response, draft_category)
        item.add_value('details', details)
        item.add_value('original_url', url)
        item.add_value('created_at', 'now')
        item.add_value('processed', False)
        print('======================================================')
        return item.load_item()
Example #5
0
    def parse(self, response):
        print('------------------------------'+str(response.status)+'----------------------------------')
        print(response.url)
        # print(response.text)
        item = ItemLoader(item=Ad(), response=response)
        id = re.search('\d+.html', response.url).group(0).replace('.html','')
        item.add_value('external_id', id)

        phone = requests.post("http://www.dorus.ru/action.php", data={'act': 'getcontact', 'type': 'phone', 'id': id}, proxies=self.proxyDict)
        print('$$$$$$$$$$$$$$$$$$'+str(phone.status_code))
        if phone.status_code == 200:
            item.add_value('phone', phone.text)
        else:
            item.add_value('phone', 'None')
            print('Телефон не скачан')
            # raise Exception('Номер телефона не скачан. Код ответа: '+str(phone.status))

        item.add_value('author_external_id', phone)
        item.add_css('author', 'div.pauthor::text')
        item.add_value('company', False)
        item.add_css('title', 'h1::text')
        item.add_css('description', 'div.margt6.margb12::text')
        item.add_css('price', 'div.pprice::text')
        item.add_value('price_unit', '₽')
        item.add_value('videos', '')
        item.add_value('details', '')
        item.add_css('site', 'div.purl>span::text')
        item.add_value('lattitude', '0')
        item.add_value('longitude', '0')
        item.add_css('address', 'div.pcity::text')

        date = response.xpath('//script/text()').re('Дата размещения: .+:\d\d</div>')[0].replace("Дата размещения: ", "").replace("</div>", "")
        date = date.replace('Января', 'Jan').replace('Февраля', 'Feb').replace('Марта', 'Mar')
        date = date.replace('Апреля', 'Apr').replace('Мая', 'May').replace('Июня', 'Jun')
        date = date.replace('Июля', 'Jul').replace('Августа', 'Aug').replace('Сентября', 'Sep')
        date = date.replace('Октября', 'Oct').replace('Ноября', 'Nov').replace('Декабря', 'Dec')
        date = str(datetime.datetime.now().year)+'-'+datetime.datetime.strptime(date, '%d %b %Y года, %H:%M').strftime('%m-%d %H:%M:00')
        item.add_value('date', date)

        images = ','.join(response.css('div.imgfull img::attr(src)').extract())
        item.add_value('images', images)

        category = response.css('div.bullet.fbold span::text').get()
        category = category.replace('Автосервис и ремонт', 'Услуги')
        category = category.replace('Автобусы, микроавтобусы', 'Спецтехника')
        category = category.replace('Грузовые автомобили', 'Спецтехника')
        category = category.replace('Железнодорожный транспорт', 'Спецтехника')
        category = category.replace('Запчасти и аксессуары', 'Запчасти для авто')
        category = category.replace('Легковые автомобили', 'Автомобили')
        category = category.replace('Мотоциклы, мопеды', 'Мототехника')
        category = category.replace('Прокат автомобилей', 'Автомобили')

        category = category.replace('Продажа и покупка бизнеса', 'Готовый бизнес')
        category = category.replace('Услуги по бизнесу', 'Готовый бизнес')

        category = category.replace('Игровые приставки', 'Игры и приставки')
        category = category.replace('Пылесосы', 'Бытовая техника')
        category = category.replace('Телевизоры', 'Бытовая техника')
        category = category.replace('Холодильники', 'Бытовая техника')
        category = category.replace('Техника для дома', 'Бытовая техника')
        category = category.replace('Фотоаппараты', 'Фототехника')
        category = category.replace('Ремонт электроники', 'Услуги')
        category = category.replace('Телефоны', 'Мобильные устройства')
        category = category.replace('Планшеты', 'Мобильные устройства')
        category = category.replace('Комплектующие', 'Компьютеры и пр.')
        category = category.replace('Компьютеры', 'Компьютеры и пр.')
        category = category.replace('Ноутбуки', 'Компьютеры и пр.')
        category = category.replace('Оргтехника', 'Компьютеры и пр.')
        category = category.replace('Ремонт и сервис', 'Компьютеры и пр.')

        category = category.replace('Собаки и щенки', 'Собаки')
        category = category.replace('Кошки и котята', 'Кошки')
        category = category.replace('Цветы', 'Растения')
        category = category.replace('Растения комнатные', 'Растения')

        category = category.replace('Коррекция фигуры и веса', 'Красота и здоровье')
        category = category.replace('Косметика и парфюмерия', 'Красота и здоровье')
        category = category.replace('Косметические услуги', 'Услуги')
        category = category.replace('Лечебная косметология', 'Красота и здоровье')
        category = category.replace('Массаж', 'Услуги')
        category = category.replace('Медицинские услуги', 'Услуги')
        category = category.replace('Услуги народной медицины', 'Услуги')

        category = category.replace('Кухни', 'Мебель и интерьер')
        category = category.replace('Мебель для дома', 'Мебель и интерьер')
        category = category.replace('Мягкая мебель', 'Мебель и интерьер')
        category = category.replace('Офисная мебель', 'Мебель и интерьер')
        category = category.replace('Прочая мебель', 'Мебель и интерьер')

        category = category.replace('Курсы', 'Услуги')
        category = category.replace('Образовательные учреждения', 'Услуги')
        category = category.replace('Репетиторы', 'Услуги')

        category = category.replace('Билеты, паспорта и визы', 'Билеты и путешествия')
        category = category.replace('Туроператоры', 'Билеты и путешествия')
        category = category.replace('Спорт товары', 'Спорт и отдых')

        item.add_value('category', category)

        item.add_value('actual', True)
        item.add_value('original_url', response.url)
        item.add_value('created_at', 'now')
        item.add_value('processed', False)
        item.add_value('provider',  'dorus')
        print('======================================================')
        return item.load_item()
Example #6
0
    def parse_item(self, response):
        print(
            '----------------------------------------------------------------')
        print(response.url)
        item = ItemLoader(item=Ad(), response=response)

        cookieJar = response.meta.setdefault('cookie_jar', CookieJar())
        cookieJar.extract_cookies(response, response.request)

        item.add_value('provider', 'phtdsk')
        id = response.css('#contacts::attr(data-id)').get()
        item.add_value('external_id', id)
        #date
        date = response.css('time::text').get().replace("\r", '').replace(
            "\t", '').replace("\n", '')
        try:
            date = datetime.datetime.strptime(
                date, "%H:%M %d.%m.%Y").strftime("%Y-%m-%d %H:%M:%S")
        except BaseException:
            None
        item.add_value('date', date)

        item.add_value(
            'title',
            response.css('h1::text').get().replace('\n', '').replace(
                "\r", '').replace("\t", ''))
        item.add_value(
            'description',
            response.css('span[itemprop="description"] p::text').get())
        item.add_value(
            'description',
            response.css('span[itemprop="description"] td::text').get())
        #price
        try:
            item.add_value(
                'price',
                response.css('span[itemprop="price"]::text').get().replace(
                    'руб.', '').replace('\n', '').replace('\xa0',
                                                          '').replace(' ', ''))
        except BaseException:
            item.add_value('price', 0)
        item.add_css('address', '.post_content h5::text')
        #coordinates
        coordinates = response.css(
            'meta[name="geo.position"]::attr(content)').get()
        coordinates = coordinates.split(';')
        item.add_value('lattitude', coordinates[0])
        item.add_value('longitude', coordinates[1])
        #images
        images = ','.join(response.css('.swiper-slide a::attr(href)').getall())
        item.add_value('images', images)
        item.add_value('videos', '')
        item.add_value('site', '')
        #author
        author_url = response.css(
            'div.an-page-other-user-ans a::attr(href)').get()
        author_external_id = response.css(
            '.panel-body div:nth-child(2) a::attr(href)').getall()[0].replace(
                '/user/', '')
        item.add_value('author_external_id', author_external_id)
        author = response.css(
            '.panel-body div:nth-child(2) a::text').getall()[0]
        item.add_value('author', author)
        # item.add_value('offer', response.css('.breadcrumb a::text').getall()[1].replace('\n',''))
        item.add_value(
            'category',
            response.css('.breadcrumb a::text').get().replace('\n', ''))
        item.add_value('details', '')

        item.add_value('original_url', response.url)
        item.add_value('created_at', 'now')
        return scrapy.FormRequest(
            "https://photodoska.ru/?a=show_contact_rn",
            # meta = {'dont_merge_cookies': True, 'cookiejar': cookieJar},
            formdata={'id': id},
            meta={'item': item},
            callback=self.parse_phone)
        item.add_value('processed', False)
        print('======================================================')