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()
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()
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()
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()
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()
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('======================================================')