Python:告诉BeatifulSoup从两个值中选择一个值

Python:告诉BeatifulSoup从两个值中选择一个值,python,beautifulsoup,Python,Beautifulsoup,我正在使用BeautifulSoup刮取一个值,但是输出给我两个值,因为它在页面上有两次,我如何选择其中一个?这是我的代码: url = 'URL' r = requests.get(url,headers=headers) soup = BeautifulSoup(r.content, "html.parser") data = soup.find_all("input", {'name': 'CsrfToken', 'type':'hidden'}) for data in data:

我正在使用BeautifulSoup刮取一个值,但是输出给我两个值,因为它在页面上有两次,我如何选择其中一个?这是我的代码:

url = 'URL'
r = requests.get(url,headers=headers)
soup = BeautifulSoup(r.content, "html.parser")
data = soup.find_all("input", {'name': 'CsrfToken', 'type':'hidden'})

for data in data:
    print(data.get('value'))

Output: 
c8b3226dc829256687cac584a9421e8acc4649ff4ee5f8f386ea11ce03a811c8
c8b3226dc829256687cac584a9421e8acc4649ff4ee5f8f386ea11ce03a811c8

The first 'CsrfToken' is in: 
<form method="post" data-url="url" id="test-form" data-test-form="" action="url" name="test-form"><input type="hidden" name="CSRFToken" value="c8b3226dc829256687cac584a9421e8acc4649ff4ee5f8f386ea11ce03a811c8">

The second 'CsrfToken' is in:
<form method="post" name="AnotherForm" class="th-form th-form__compact th-form__compact__inline" data-testid="th-comp-Another-form" action="url" id="AnotherForm"><input type="hidden" name="CSRFToken" value="c8b3226dc829256687cac584a9421e8acc4649ff4ee5f8f386ea11ce03a811c8">

我只需要第一个或第二个值,以便有效负载请求能够正确加载

要尽早退出循环,请尝试:

for data in data:
    print(data.get('value'))
    break
要始终获取第一个元素,可以执行以下操作:

def get_first_value(item):
    try:
        return item.get('value')[0]
    except TypeError:
        return None

value = get_first_value(data)
使用find,它将为您提供页面上标记的第一个实例。 find_all返回页面上标记的所有实例

关于查找所有与查找:

find_all方法扫描整个文档以查找结果, 但有时你只想找到一个结果。如果你知道一份文件 只有一个标签,扫描整个系统是浪费时间 文档查找更多信息。而不是每次都通过限制=1 如果调用find_all,则可以使用find方法


所以您仍然可以使用find_all,只需传入1作为limit参数

汤。找而不是汤。全部找?你想选哪一个?你是程序员,你必须告诉计算机你想让它做什么。soup.find不起作用,它没有给我任何价值。假设我想从test form中得到第一个值,使用d=data[0]有什么问题?使用d=data[0]我得到错误;'return self.attrs[key]“find_不是所有问题吗?这是可行的,但是我如何将其放入有效负载请求中,因此例如,我有:payload={'CsrfToken':data.get'value'With find它不打印任何值,因为find_all返回一个值列表,而find返回它自己的值findinput返回什么?