Я пытаюсь помочь моему другу очистить некоторые данные, необходимые для визуализации. Он работает над визуализацией пропорций крупных торговых точек на карте США, используя 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 для их анализа?
Большое спасибо за вашу помощь заранее.