Python & BeautifulSoup:从带class的div中获取无标识子链接
解决方法
核心问题分析
你之前的尝试失败主要因为两个点:
find_all返回的是ResultSet(标签列表),不能直接调用find_all/select方法,必须遍历列表里的单个Tag对象再操作- 部分代码里的class名写错(是
object不是objects)、选择器逻辑错误、用了不存在的方法(iselect)
可行方案一:先获取div列表再遍历提取a标签
先拿到目标div列表,再逐个遍历每个div,提取其中的子a标签:
from bs4 import BeautifulSoup soup = BeautifulSoup(pageToScrape.text, "html.parser") # 先获取所有class为object的div标签(用class_比attrs更简洁) div_list = soup.find_all('div', class_='object') # 收集所有div下的a标签 all_a_tags = [] for div in div_list: # 提取当前div下的所有a标签 links = div.find_all('a') all_a_tags.extend(links) # 如果需要直接获取链接文本或href属性,可直接生成列表: # 链接文本(自动去除首尾空白) link_texts = [a.get_text(strip=True) for div in div_list for a in div.find_all('a')] # 链接地址(先判断href属性存在,避免报错) link_hrefs = [a['href'] for div in div_list for a in div.find_all('a') if 'href' in a.attrs]
可行方案二:用CSS选择器一步到位
直接通过CSS选择器定位所有class为object的div下的a标签,无需先获取div列表:
from bs4 import BeautifulSoup soup = BeautifulSoup(pageToScrape.text, "html.parser") # 选择器语法:div.object 表示class为object的div,空格表示后代元素 all_a_tags = soup.select('div.object a')
内容的提问来源于stack exchange,提问作者Cody
相关产品推荐
相关产品推荐

