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

由于想要将自己平时收藏的店铺做个整理,需要解析获取到上图右侧部分的地图标签,然后从图片 url 里提取坐标的经纬度信息。但是使用 requests 解析不到网页右侧一列的部分;使用 Puppeteer 并设置 Header+Cookie 只能获取到一个 html 裸页面,结果如下图
代码参考 https://gist.github.com/huyinjie/bd1733be239ed69352acd7aa33b05dfa
Python中如何获取大众点评商铺的位置信息
关注。。。我之前只爬了地名,没拿准确经纬度。我本来是打算拿百度 API 查地址的经纬度的。。。
要获取大众点评商铺的位置信息,最直接的方法是使用其官方API。不过大众点评的API通常需要企业认证和申请,个人开发者可能难以直接使用。因此,一个常见的替代方案是通过网页爬虫来抓取数据。
这里提供一个使用requests和BeautifulSoup进行基础爬取的示例。请注意,实际操作前务必检查目标网站的robots.txt文件,并尊重其使用条款,避免高频请求对服务器造成压力。
import requests
from bs4 import BeautifulSoup
import re
def get_dianping_shop_location(shop_id):
"""
根据商铺ID,尝试获取其地址信息。
注意:大众点评的页面结构经常变动,此代码可能需要调整。
"""
url = f'https://www.dianping.com/shop/{shop_id}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查请求是否成功
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
# 寻找地址信息 - 这是最关键的步骤,选择器需要根据实际页面更新
# 方法1: 尝试通过常见的类名或标签寻找
address_tag = soup.find('span', class_='address')
if not address_tag:
# 方法2: 尝试通过itemprop属性寻找(如果页面使用微数据)
address_tag = soup.find('span', itemprop='street-address')
if not address_tag:
# 方法3: 使用正则表达式在页面文本中搜索
match = re.search(r'地址[::]\s*([^\s<]+)', response.text)
if match:
return match.group(1)
else:
return "未在页面中找到明确的地址信息。"
return address_tag.get_text(strip=True)
except requests.exceptions.RequestException as e:
return f"网络请求出错: {e}"
except Exception as e:
return f"解析过程中出现错误: {e}"
# 使用示例
if __name__ == '__main__':
# 你需要一个真实的商铺ID,例如从大众点评网址中获取
# 例如,对于 https://www.dianping.com/shop/H9zK5sF2ZqN7jXlR, ID 是 'H9zK5sF2ZqN7jXlR'
test_shop_id = 'H9zK5sF2ZqN7jXlR' # 请替换为有效的ID
location = get_dianping_shop_location(test_shop_id)
print(f"商铺地址: {location}")
核心要点:
- 反爬虫机制:大众点评有较强的反爬措施,简单的
requests可能很快会被屏蔽。你可能需要处理Cookie、动态加载(JavaScript渲染)等问题,考虑使用selenium或playwright等浏览器自动化工具。 - 页面结构:网页的HTML结构可能随时更改,代码中的
address_tag查找逻辑需要根据实际情况调整。使用浏览器的开发者工具(F12)检查元素是必须的。 - 合法性:确保你的数据抓取行为符合网站条款和法律法规,用于个人学习或获得授权的项目。
总结建议:优先考虑申请官方API,爬虫方案需谨慎使用并保持维护。
点评改版了 原来的页面是可以抓取的 现在好多字符都被替换了 地址都抓不全
view-source:http://www.dianping.com/shop/97297788
搜索关键字
shopGlat
shopGlng
#3 太感谢了
#2 那个用了 CSS 的 background-position,能想办法提取到的地址,但还是需要用百度 /高德的 API 转换经纬度信息
#3 不过程序处理的时候不还是要解决 header/cookie 之类的验证问题吗,这样相当于直接用浏览器访问了
没懂,这部分内容是 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”
#7 感谢

