【发布时间】:2018-06-09 21:27:38
【问题描述】:
我正在尝试使用 python 从谷歌地图中抓取某个地方的评论数量。例如,Pike's Landing 餐厅(见下面的谷歌地图 URL)有 162 条评论。我想在 python 中提取这个数字。
网址:https://www.google.com/maps?cid=15423079754231040967
我对 HTML 不是很熟悉,但是从互联网上的一些基本示例中,我编写了以下代码,但运行此代码后得到的是一个黑色变量。如果你能让我知道我在这方面做错了什么,那将不胜感激。
from urllib.request import urlopen
from bs4 import BeautifulSoup
quote_page ='https://www.google.com/maps?cid=15423079754231040967'
page = urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
price_box = soup.find_all('button',attrs={'class':'widget-pane-link'})
print(price_box.text)
【问题讨论】:
-
抓取完整的地图数据真的很难。为什么不尝试使用 API?
-
我不是要抓取完整的地图,只是在地图最左边的窗格上的特定数字。此外,截至目前,谷歌地图 api 不返回评论数量。
-
可以通过JavaScript添加,urllib+BeautifulSoup不能运行JavaScript。您可以使用
Selenium来控制将加载页面并运行 JavaScript 的 Web 浏览器。或者您可以尝试在一些 JavaScript 代码中查找此信息 - 直接在 HTML 或外部文件中*.js。 JavaScript 也可以使用 AJAX/XHR 从不同的 url 加载数据,你可以尝试使用 Chrome/Firefox 中的 DevTool 来找到这个 url。 XHR 主要以 JSON 字符串的形式获取数据,您可以使用模块json轻松地将其转换为 python 字典 -
顺便说一句:谷歌使用 JavaScript 在页面上添加元素,但如果谷歌发现客户端不使用 JavaScript,那么它可以发送不需要 JavaScript 的页面,但元素大多位于不同的标签中类。因此,您可以在浏览器中关闭 JavaScript 并再次加载地图,以查看 BeautifulSoup 从 Google 获得了什么。或者您可以保存来自
urlopen()的文件数据并在网络浏览器或文本编辑器中打开此文件。 -
我对 selenium 或 Java 脚本不是很熟悉,但我可以肯定地研究一下。如果您建议我可以使用我使用的简单方法来抓取谷歌地图,还想符合吗?我希望对上面发布的代码 sn-p 进行微小的更改以实现我的目标。
标签: python html web-scraping beautifulsoup scrapy