试图在网站上抓取谷歌地图api生成的动态数据,但正常抓取返回空白

Trying to scrape dynamic data generated by google maps api on a website, but normal scraping returns blank

本文关键字:抓取 常抓取 数据 返回 空白 网站 谷歌地图 api 动态      更新时间:2023-09-26

我正在使用scrapy从这个网站上抓取工作数据。一个作业页面是这样的。静态数据可以很容易地被抓取,但谷歌地图api(如"距离"answers"时间")生成的动态数据给我带来了问题。我得到距离字段的"未知距离"值和时间字段的空白值。

当我在chrome中打开控制台,然后在脚本部分的网络选项卡中,我可以看到一个向谷歌地图api发出的java请求("DirectionsService.Route"),我需要的所有值都以JSON格式存在。

有没有一种方法可以让我使用scray来获得谷歌地图api生成的json输出?

如果没有,那么有没有一种方法可以对scratch脚本进行编程,等待完整的页面加载(以便加载距离和时间值),然后刮取这些值?

问题是scrapy不呈现javascript,"距离"answers"时间"字段都由javascript填充。

你有几个选择。您可以使用Splash(http://splash.readthedocs.org/en/latest/index.html)由与Scrapy或selenium/phantomjs相同的人制作。

selenium和scrapy的动态页面有很多链接/信息。

至于JSON/ratchy,您可以使用python中的JSON库(导入JSON)将JSON加载到python字典中,如:

   json_url = 'http://www.whatever.com/whatever.json'
   yield Request(json_url, callback=self.parse_json)
def parse_json(self, response):
   json_dict = json.loads(response.body_as_unicode())

如果您生成的URL返回JSON,那么数据现在将位于名为JSON_dict的python字典中。