如何获取大众点评商铺的位置信息

2018-12-08 18:23:13 +08:00
 huyinjie

由于想要将自己平时收藏的店铺做个整理,需要解析获取到上图右侧部分的地图标签,然后从图片 url 里提取坐标的经纬度信息。但是使用 requests 解析不到网页右侧一列的部分;使用 Puppeteer 并设置 Header+Cookie 只能获取到一个 html 裸页面,结果如下图

Puppeteer Test

代码参考 https://gist.github.com/huyinjie/bd1733be239ed69352acd7aa33b05dfa

3367 次点击
所在节点    Python
8 条回复
cqcn1991
2018-12-08 18:45:08 +08:00
关注。。。我之前只爬了地名,没拿准确经纬度。我本来是打算拿百度 API 查地址的经纬度的。。。
zenze
2018-12-08 20:46:40 +08:00
点评改版了 原来的页面是可以抓取的 现在好多字符都被替换了 地址都抓不全
Vegetable
2018-12-08 20:55:34 +08:00
view-source:http://www.dianping.com/shop/97297788

搜索关键字
shopGlat
shopGlng
huyinjie
2018-12-08 21:02:47 +08:00
@Vegetable #3 太感谢了
huyinjie
2018-12-08 21:04:56 +08:00
@zenze #2 那个用了 CSS 的 background-position,能想办法提取到的地址,但还是需要用百度 /高德的 API 转换经纬度信息
huyinjie
2018-12-08 21:12:31 +08:00
@Vegetable #3 不过程序处理的时候不还是要解决 header/cookie 之类的验证问题吗,这样相当于直接用浏览器访问了
Vegetable
2018-12-08 21:41:45 +08:00
@huyinjie 没懂,这部分内容是 html 文本,你的代码只要修改一下最后
await page.goto(
'http://www.dianping.com/shop/103638985',
{ "waitUntil": "networkidle0" }
);
await page.waitFor(6000);
let content = await page.content()

let lat = /shopGlat: *"\d+?\.\d+?"/
let lng = /shopGlng: *"\d+?\.\d+?"/
console.log(lat.exec(content)[0])
console.log(lng.exec(content)[0])
await browser.close();

就可以取到了
shopGlat: "32.023975"
shopGlng:"118.791344"
huyinjie
2018-12-08 22:16:10 +08:00
@Vegetable #7 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/515684

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX