如何使用BeautifulSoup提取class为graph的ul下li中a的href链接
目标href提取实现方案
针对你给出的HTML结构,按如下逻辑调整代码即可稳定提取对应链接,之前方法失效通常是两个常见操作误区导致的。
可直接复用的代码
from bs4 import BeautifulSoup as soup import requests # 替换为实际目标页面地址 url = "目标页URL" page = requests.get(url) content = soup(page.content, "html.parser") # 逐层锚定目标容器,避免抓取到页面其他位置的无关a标签 target_list = content.find("div", class_="body").find("ul", class_="graph") # 获取容器下所有a标签元素 a_elements = target_list.find_all("a") # 遍历元素列表提取href属性 href_results = [element.get("href") for element in a_elements] # 运行后输出结果为 ['Address one', 'Address two', 'Address three'] print(href_results)
之前操作失效的常见原因
- 直接对
find_all("a")的返回结果调用get("href"):find_all返回的是匹配到的标签元素组成的列表,不是单个标签对象,本身不支持调用get方法,必须循环遍历列表中的每一个独立标签,才能正常读取标签的属性值 - 未限定抓取范围:如果直接对整个页面调用
find_all("a"),可能匹配到其他位置没有href属性的标签,读取属性时会返回空值 - 目标内容为前端动态渲染生成:如果目标ul列表是页面加载后通过JS动态插入的,requests直接获取的原始HTML中不包含这部分结构,调用
find_all自然返回空列表,此时需要调整请求方式拿到完整渲染后的页面内容再做解析
内容的提问来源于stack exchange,提问作者Lucas Sun
相关产品推荐
相关产品推荐

