为什么Splash返回的锚标记中没有hrefs?

时间:2018-11-10 05:53:21

标签: javascript python web-scraping scrapy scrapy-splash

我正试图帮助我的朋友抓取一些可视化所需的数据。他正在使用Tableau在美国地图上可视化主要零售店的比例。我这方面的最终目标是拥有一个CSV,其中包含给定链的所有位置的街道地址,城市,州和邮政编码。

从这里开始BJ:

https://www.bjs.com/allClubLocator

我的方法是使用Splash解析JS,使用Scrapy将返回的HTML刮擦成字典(就像我之前对静态网站所做的那样),然后将数据输出到CSV。

首先,您必须在商店“链接”之前选中一个复选框 显示特定状态的信息:

State checked

下面是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) 

但是,Splash返回的HTML没有href标记,只有城市名称的文本:

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

单击后,将带您到/ mapDetail; city =%somenumber之类的URL。例如,https://www.bjs.com/mapDetail;city=0119会带您到罗德岛考文垂的商店页面。

使用正则表达式解析城市,州和地址很容易,但是我不能做到这一点,除非能够将Scrapy发送到这些详细信息页面...

几乎是肯定的,我现在有一个荷马·辛普森时刻,并且缺少Splash lua脚本中的一些基本内容来解析它们?

非常感谢您的提前帮助。

0 个答案:

没有答案