Web Scraping问题:程序无法读取标签,无法获取目标药店数据
解决Acfarma药房页面的Web Scraping问题
嘿,我来帮你搞定这个爬取问题!首先看你遇到的情况:代码返回空值,而且还犯了个小粗心的错误——你的请求URL是Mafra的页面,但你实际要爬的是Nova Veneza的药房信息,这第一步就跑偏啦!另外,原代码的元素定位太宽泛,直接遍历所有li里的div,根本抓不到目标的药房数据。
问题分析
- URL错误:你代码里请求的是
?cidade=Mafra&bairro=CENTRO,但目标页面是Nova Veneza的,这会导致获取的页面内容完全不对; - 元素定位不准确:页面里的药房信息都被包裹在特定类名的容器里,不是随便的
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
相关产品推荐
相关产品推荐

