基于Pandas与Beautiful Soup的网页爬取:提取指定标签内链接问题
修正你的BeautifulSoup提取代码
我帮你梳理下代码里的问题,再给出调整后的版本:
原代码的几个问题
- 调用
find_all时错误传入了完整标签字符串('<td class="series-column"'),正确姿势是指定标签名,再用class_参数筛选类 - 内层查找
<a>标签时,没有限定在当前<td>范围内,会遍历整个文档的所有<a>标签 - 判断class属性的逻辑有误:
link.has_attr('class') == 'formatted-title external-link result-url',class属性返回的是字符串列表,不能直接和字符串做相等比较
修正后的代码
# 假设你已经初始化了BeautifulSoup对象,变量名为soup for row in soup.find_all('td', class_='series-column'): # 仅在当前td标签内部查找a标签 for link in row.find_all('a'): # 检查href属性存在,且所有目标class都在a标签的class列表中 if link.has_attr('href') and all(cls in link.get('class', []) for cls in ['formatted-title', 'external-link', 'result-url']): print(link['href'])
额外提示
- 记得把代码里的
soup替换成你实际使用的BeautifulSoup对象变量名 link.get('class', [])是为了避免a标签没有class属性时抛出异常,默认返回空列表- 如果你只需要匹配部分class,可调整
all()里的判断逻辑,比如换成any()或者指定单个class检查
内容的提问来源于stack exchange,提问作者Regid
相关产品推荐
相关产品推荐

