使用BeautifulSoup + Python提取div内所有href链接时仅获取到第一个链接的问题
解决BeautifulSoup仅提取第一个链接的问题
我来帮你搞定这个问题!你的代码只输出第一个链接,是因为links.find('a')这个方法只会返回第一个匹配到的<a>元素,所以每次循环都只能拿到第一个链接的href。要提取所有链接,你需要用能返回全部匹配结果的方法,这里有两种简单可行的解决方案:
方法一:嵌套遍历所有匹配的a标签
先定位到目标div,再用find_all('a')获取该div下的所有链接标签,接着遍历输出每个链接的href:
classroomLinks = soup.find_all("div", {"class": "main_class"}) for div in classroomLinks: # 获取当前div下的所有<a>标签 all_a_tags = div.find_all('a') for link in all_a_tags: print(link['href'])
方法二:用CSS选择器一步到位(更简洁)
直接通过CSS选择器定位所有在.main_class下的<a>标签,省去嵌套循环的步骤,代码更简洁高效:
# 选择所有class为main_class的div内部的a标签 all_links = soup.select("div.main_class a") for link in all_links: print(link['href'])
简单总结下:find()方法的作用是“找到第一个匹配元素”,而find_all()和select()(当选择器匹配多个元素时)会返回所有符合条件的元素列表,所以要提取所有链接,就需要用后两者拿到结果列表,再遍历列表输出每个元素的href属性。
内容的提问来源于stack exchange,提问作者user14221871
相关产品推荐
相关产品推荐

