You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup接收用户输入后返回空列表的问题求助

问题原因及解决方案

你的代码返回空列表的核心问题是**find_all的参数传递逻辑错误**:
page.find_all(inp, 'a', href=True) 中,第一个参数是标签名,你把用户输入的查询内容放在了这个位置,第二个参数又指定了'a'标签,这相当于在查找「标签名为用户输入内容、同时又是<a>标签」的元素,显然不存在这类元素,所以返回空列表。


针对不同需求的修正方案

根据你想要匹配的内容类型,选择对应的写法:

1. 匹配文本包含用户输入内容的<a>标签(带href)

这是最常见的需求,比如输入"Wikipedia",找到所有文本里包含这个词的链接:

datavar = page.find_all('a', href=True, string=lambda text: text and inp.lower() in text.lower())
  • lambda text: text and ...:先确保标签存在文本,避免空文本报错
  • 转小写是为了实现忽略大小写的模糊匹配

也可以用正则实现更灵活的匹配:

import re
datavar = page.find_all('a', href=True, text=re.compile(inp, re.IGNORECASE))

2. 匹配属性包含用户输入内容的<a>标签

如果是想找class/id等属性里包含输入内容的链接,比如输入"mw-headline"找对应class的链接:

datavar = page.find_all('a', href=True, class_=lambda c: c and inp in c)
  • 注意BeautifulSoup中用class_而非class,避免和Python关键字冲突

完整修正代码示例

import requests
from bs4 import BeautifulSoup
import re

url = "https://en.wikipedia.org/wiki/Main_Page"
resp = requests.get(url).text
page = BeautifulSoup(resp, "html.parser")

def Get_Links():
    inp = input("Enter data you wish to find: ")
    # 选择下面其中一种写法即可
    # 写法1:lambda匹配文本
    datavar = page.find_all('a', href=True, string=lambda text: text and inp.lower() in text.lower())
    # 写法2:正则匹配文本
    # datavar = page.find_all('a', href=True, text=re.compile(inp, re.IGNORECASE))
    print(datavar)

Get_Links()

内容的提问来源于stack exchange,提问作者somerandomguyhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:10:36