如何使用BeautifulSoup提取href中的URL?现有代码问题求助
问题分析与解决方案
嘿,我一眼就看出问题出在哪啦!你现在的代码里,el是选中的<li class="arrow03">元素,但**href属性根本不在<li>标签上**——它是属于<li>里面嵌套的<a>标签的,所以你直接用el.get('href')当然拿不到值,只会返回默认的"no URLs"。
给你两种修改思路,根据页面实际情况选:
方案1:每个<li>里只有一个<a>标签(最常见场景)
直接用find()代替find_all()获取单个<a>标签,再从中提取href:
import requests as r from bs4 import BeautifulSoup url = r.get('https://jen.jiji.com/') soup = BeautifulSoup(url.text, "html.parser") for el in soup.find_all('li', attrs={'class': 'arrow03'}): # 用find()获取单个a标签,而非返回列表的find_all() a_tag = el.find('a') if a_tag: # 先判断标签是否存在,避免报错 link = a_tag.get('href', 'no URLs') print(a_tag.text) # 可选:打印a标签显示的文本内容 print(link) else: print("当前li中未找到a标签")
方案2:每个<li>里有多个<a>标签
如果一个<li>里包含多个<a>,就遍历find_all()返回的列表,逐个提取href:
import requests as r from bs4 import BeautifulSoup url = r.get('https://jen.jiji.com/') soup = BeautifulSoup(url.text, "html.parser") for el in soup.find_all('li', attrs={'class': 'arrow03'}): a_tags = el.find_all('a') for a_tag in a_tags: link = a_tag.get('href', 'no URLs') print(a_tag.text) print(link)
额外小提示
- 提取属性前先判断标签是否存在,能避免出现
AttributeError(比如某个<li>里恰好没有<a>标签的情况)。 - 如果后续遇到爬取被拦截的情况,可以给请求加
headers(比如模拟浏览器的User-Agent),提升请求的通过率。
内容的提问来源于stack exchange,提问作者Hero8
相关产品推荐
相关产品推荐

