Почему в тегах привязки, возвращаемых Splash, нет ссылок? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь помочь моему другу очистить некоторые данные, необходимые для визуализации. Он работает над визуализацией пропорций крупных торговых точек на карте США, используя Tableau. Конечной целью для меня является создание CSV с адресом улицы, городом, штатом и почтовым индексом для всех мест данной цепочки.

Начиная с BJ здесь:

https://www.bjs.com/allClubLocator

Мой подход будет состоять в том, чтобы анализировать JS с помощью Splash, преобразовывать возвращаемый HTML-код с помощью Scrapy в диктовку (как я это делал ранее для статических веб-сайтов) и затем выводить данные в CSV.

Сначала нужно поставить галочку перед магазином "Ссылки" для конкретного состояния отображаются:

Государственный контроль

Ниже приведен сценарий Splash lua для проверки всех полей и отображения всех ссылок (это прекрасно работает):

    function main(splash, args)
      assert(splash:go(args.url))
      assert(splash:wait(0.5))
      splash:runjs('var elem = document.getElementsByClassName("checkBox"); for (var i=0; i<elem.length; i++) {elem[i].click();}')
      return {
        html = splash:html()
      }
    end

Обычно я хотел бы сделать что-то подобное, чтобы вставить ссылки в response.follow:

    for link in response.xpath('//div[@class="class_name"]/a/@href'):
        yield response.follow(link, self.parse) 

Однако HTML-код, возвращаемый Splash, не имеет тегов href, только текст для названия города:

<a _ngcontent-c24="" class="state-hyperlink">Auburn</a>

При нажатии вы переходите по URL-адресу, например / mapDetail; city =% somenumber. Например, https://www.bjs.com/mapDetail;city=0119 приведет вас на страницу магазина в Ковентри, Род-Айленд.

Было бы легко разобрать город, штат и адрес с помощью регулярных выражений, но я не смогу сделать это, не отправив Scrapy на эти страницы с подробностями ...

Почти уверен, что у меня есть момент Гомера Симпсона и мне не хватает чего-то простого в скрипте Splash lua для их анализа?

Большое спасибо за вашу помощь заранее.

...