使用Python 3.9提取Tamoil门店地址至Excel,代码仅生成表头无数据
解决Python爬取Tamoil店铺地址无数据的问题
原代码无法获取地址数据的核心原因是目标页面的店铺信息通过JavaScript动态加载,requests.get()仅能获取页面的静态HTML骨架,此时store-element这类包含地址的元素还未被渲染,导致soup.find_all('div', class_='store-element')返回空列表,最终Excel仅显示表头。
解决方案
通过浏览器开发者工具抓包找到加载店铺数据的后台API接口,直接请求该接口获取结构化JSON数据,再提取地址信息。
修改后的代码
import requests import pandas as pd # 实际加载店铺数据的API接口(通过浏览器抓包获取) api_url = "https://www.tamoil.ch/api/stores?lang=en&lat=46.8181877&lng=8.2275124&radius=100000" # 请求API并处理响应 response = requests.get(api_url) response.raise_for_status() # 捕获请求失败的异常 store_data = response.json() # 提取并拼接完整地址 addresses = [] for store in store_data: address_components = [ store.get('street'), f"{store.get('zip')} {store.get('city')}", store.get('country') ] # 过滤空字段,拼接成换行分隔的完整地址 full_address = '\n'.join(filter(None, address_components)) addresses.append(full_address) # 保存到Excel df = pd.DataFrame({'Address': addresses}) excel_file = 'tamoil_addresses.xlsx' df.to_excel(excel_file, index=False) print(f"Addresses saved to {excel_file}")
补充说明
- 如何获取API接口:打开浏览器F12开发者工具→切换到「网络」面板→刷新页面→筛选「XHR/Fetch」类型请求,找到返回店铺列表的请求,复制其URL作为
api_url。 - 若API返回的字段结构有变化,可根据实际JSON数据调整
address_components中的字段名,确保提取正确的地址信息。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

