gadzhi15
@gadzhi15

Scrapy. Как оптимизировать код?

Парсю страницу с помощью Scrapyhttps://www.reformagkh.ru/myhouse/profile/view/7913930/

Написал такой код:
def parse_item(self, response):

        hxs = HtmlXPathSelector(response)
        l = ReformaLoader(ReformaItem(), hxs)
        l.add_xpath('house', '/html/body/div[1]/div[2]/h1/span[2]/span[1]/text()')
        l.add_xpath('organization', '/html/body/div[1]/div[2]/section/div[1]/table[1]/tbody/tr/td[2]/a/text()')
        l.add_xpath('year',
                    '/html/body/div[1]/div[2]/div[7]/div/div/div[1]/div/div/table/tbody/tr[4]/td[2]/span/text()')
         return l.load_item()


Потом дотукал что данные представлены в виде таблицы, и можно не писать полный XPATh путь, а просто циклом for проходить по таблицы и извлекать нужные поля

titles = hxs.xpath("//table[@class='orders overhaul-services-table']//tr")
        for titles in titles:

            l.add_xpath(????)


Но никак не пойму как обращаться в самом цикле к элементам таблицы, которые нужно извлечь. Или я избрал не тот путь решения задачи? Подскажите куда копать?

P.S. Во вкладке лифты, таблица с данным бывает разной, в зависимости от дома. Поэтому и первое мое решение не есть хорошее
  • Вопрос задан
  • 575 просмотров
Пригласить эксперта
Ответы на вопрос 1
glebovgin
@glebovgin
Full Stack Web Developer
Я со Scrapy ни разу не работал, но думается мне вам надо смотреть в сторону относительных xpath-запросов в стиле:

titles = hxs.xpath("//table[@class='orders overhaul-services-table']//tr")
        for title in titles:
                item['year'] = title.xpath('./td[2]/span/text()').extract()
                item['organization'] = title.xpath('./td[2]/a/text()').extract()


где item - массив с вашими данными.
Относительные пути должны начинаться с точки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы