我正在尝试使用/search/ from maps从谷歌Map上抓取数据。
当我自己搜索时,我录下了这个:'https://www.google.com/maps/search/new约克'
然后我被重定向到这个网址:' https://www.google.com/maps/place/New+York,+%C3%89tat+de+New+York,+%C3%89tats-Unis/@40.6974881,-73.979681,10z/data=!3m1!4b1!4m5!3m4!1s0x89c24fa5d33f083b:0xc80b8f06e177fe62!8m2!3d40.7127753!4d-74.0059728 '
我无法使用axios来重现这个行为。我想也许可以用async / await来做一些事情,但是从那以后我就没有找到任何解决方案。
下面是我代码:
const axios = require('axios');
const cheerio = require('cheerio');
var map = 'www.google.com/maps/search/';
axios.get(map + 'New York')
.then(response => {
let getData = html => {
coor = [];
v= -1;
const $ = cheerio.load(html);
$('.widget-pane-content scrollable-y').each((i, elem) => {
coor.push({
adress : $(elem).find('span.widget-pane-link').text(),
});
});
console.log(coor);
console.log(coor.length);
}
getData(response.coor);
})
.catch(error => {console.log(error);})
当我执行该文件时,我收到以下错误:
'Error: Request failed with status code 400'
如果你有任何线索来解决我的问题,谢谢分享它!
3条答案
按热度按时间n53p2ov01#
看看像Selenium或Cypress.js这样的工具(selenium的 Package 器)
(搜索“端到端测试”或“自动浏览器”)
不幸的是,Axios这样的工具无法做到这一点。Google Maps不会返回
redirect
响应,而是使用JavaScript重新加载页面。柏树示例:
ncgqoxb02#
尝试将cookieJar与axios一起使用
https://github.com/axios/axios/issues/943#issuecomment-599174929
或者使用
request
包将jar设置为truehttps://stackoverflow.com/a/48912841/11686526
zz2j4svz3#
你不能使用
axios
从Google Maps获取地点信息,因为结果是通过JavaScript构建在页面上的,所以你需要使用一些浏览器自动化,例如Puppeteer。在下面的代码中,我向你展示了如何实现这一点(也可以在在线IDE上查看):输出量
你可以从我的博客文章Web Scraping Google Maps Places with Nodejs中阅读更多关于抓取谷歌Map的内容。