You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Scraping问题:程序无法读取标签,无法获取目标药店数据

解决Acfarma药房页面的Web Scraping问题

嘿,我来帮你搞定这个爬取问题!首先看你遇到的情况:代码返回空值,而且还犯了个小粗心的错误——你的请求URL是Mafra的页面,但你实际要爬的是Nova Veneza的药房信息,这第一步就跑偏啦!另外,原代码的元素定位太宽泛,直接遍历所有li里的div,根本抓不到目标的药房数据。

问题分析

  1. URL错误:你代码里请求的是?cidade=Mafra&bairro=CENTRO,但目标页面是Nova Veneza的,这会导致获取的页面内容完全不对;
  2. 元素定位不准确:页面里的药房信息都被包裹在特定类名的容器里,不是随便的li或div就能拿到的。

修正后的代码

下面是能正确获取你想要信息的代码,我已经做了详细的注释:

import requests
from bs4 import BeautifulSoup

# 替换成正确的目标页面URL,注意把&换成&(或者直接用原始的正确链接)
target_url = "http://acfarma.com.br/encontre-uma-farmacia/?cidade=Nova%20Veneza&bairro=CENTRO"
# 发送请求获取页面内容
response = requests.get(target_url)
# 用BeautifulSoup解析页面
soup = BeautifulSoup(response.content, 'html.parser')

# 定位每个药房的信息容器——页面里每个药房的数据都在class为"farmacia-dados"的div中
pharmacy_containers = soup.find_all('div', class_='farmacia-dados')

# 遍历每个药房容器,提取并打印信息
for container in pharmacy_containers:
    # 提取容器内的所有文本,按换行分割,同时过滤掉空行
    info_lines = [line.strip() for line in container.get_text(separator='\n').split('\n') if line.strip()]
    for line in info_lines:
        print(line)
    # 打印分隔线,区分不同药房
    print("\n" + "-"*50 + "\n")

代码说明

  • 首先修正了请求URL,确保获取的是Nova Veneza Centro区域的药房页面;
  • 精准定位到存储药房信息的farmacia-dados类容器,避免抓取无关内容;
  • 用get_text(separator='\n')把容器内的文本按换行拆分,再过滤掉空行,最后逐行打印,就能得到你预期的清晰格式。

运行这段代码后,就能输出你想要的两家药房的完整信息啦!

内容的提问来源于stack exchange,提问作者Ally

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:00:47