Как я могу получить правильный селектор (CSS / XPath) для использования с Scrapy? - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу собрать информацию с этого сайта: https://www.atl.no/finn-trafikkskole?limit=0&limitstart=0 (национальный список автошкол) для отображения почтовых индексов и названий компаний на карте (у меня уже есть сопоставление из почтовых индексов по координатам) найти районы со значительной концентрацией школ. Оптимальным результатом был бы селектор, который извлекает всю необходимую информацию о каждой из 710 компаний ( вся соответствующая информация о каждой компании )

выделенный почтовый индекс первой автошколы

Я пытался скопировать CSS "селектор" и XPath требуемой таблицы ( таблица, как в Chrome DevTools ), но при запуске селектора CSS / XPath в Scrapy ничего не возвращает.

Пример скопированного селектора CSS, который ничего не дает при запуске в оболочке Scrapy:

In (1): response.css("#adminForm > table > tbody").extract()

Out (1): []

Что я сделал не так и как мне поступить, чтобы получить желаемый результат?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

#adminForm > table > tbody возвращает пустые результаты, потому что tbody - это тег, автоматически добавляемый браузерами, такими как Firefox и Chrome.

Но при просмотре с помощью Scrapy tbody не было в ответе HTML.

См. Источник страницы: вид-источник: https://www.atl.no/finn-trafikkskole?limit=0&limitstart=0

См. Scrapy рассказывает о теге tbody https://docs.scrapy.org/en/latest/topics/developer-tools.html#caveats -with-inspecting- заместитель живого браузера дом

0 голосов
/ 04 апреля 2020

Исходя из структуры страницы, я бы разбил задание на синтаксический анализ следующим образом:

    def extract_text(self, item):
        text = item.get()
        text = re.sub(r'<.*?>', '', text)
        return text

    def parse(self, response):
        for school in response.css('.uk-table tr'):

            yield {
                'address': self.extract_text(school.css('.school-address')),
                'school': school.css('tr > td > a::text').get(),
            }
...