BeautifulSoup find_all未获取全部元素,求问题排查与解决方法
问题原因及解决办法
原因分析
你的代码只获取到前两个链接就停止,核心问题是依赖next_element.next_element定位链接的方式完全不可靠:
- 这种方式完全绑定HTML节点的相邻结构,网页中前两个
<article>的相邻节点刚好是含链接的<a>标签,但后续<article>的相邻节点结构发生了变化,要么找不到带href属性的元素,要么触发AttributeError报错导致程序直接终止,因此只输出了前两个结果。
修改方案
直接在每个<article>标签内部,通过标签和类名精准定位目标链接(这是网页爬取的标准可靠方式),修改后的代码如下:
import requests from bs4 import BeautifulSoup url = "https://www.gelbeseiten.de/branchen/rechtsanwalt/mannheim" req = requests.get(url) src = req.text soup = BeautifulSoup(src, "lxml") all_firmas = soup.find_all("article", class_="mod mod-Treffer") for firma in all_firmas: # 直接在article内部定位目标链接标签 link_tag = firma.find("a", class_="Treffer-link") if link_tag: print(link_tag.get("href")) print("Category done!")
修改说明
- 替换定位逻辑:用
firma.find("a", class_="Treffer-link")替代依赖节点位置的next_element,直接通过标签和类名匹配目标链接,不受网页节点结构变化影响。 - 增加容错机制:添加
if link_tag:的判断,避免因个别节点缺失链接导致程序报错终止,提升代码鲁棒性。
内容的提问来源于stack exchange,提问作者Alberi
相关产品推荐
相关产品推荐

