我正在使用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">
我只想要第一个或第二个值,以便我的负载请求可以正确加载。
答案 0 :(得分:1)
使用# Title has a descender (lowercase 'p')
ggplot(data=mtcars,aes(x=disp,y=mpg)) +
geom_point() + ggtitle("Scatter plot")
,它会在页面上为您提供第一个标记实例。
find()
会在页面上返回标记的所有实例。
关于find_all()
与find_all()
的{{3}}:
find()
方法扫描整个文档以查找结果, 但有时你只想找到一个结果。如果你知道一份文件 只有一个find_all()
标签,扫描整个标签是浪费时间 文件寻找更多。而不是每次都传递<body>
您拨打limit=1
,可以使用find_all
方法。
所以你仍然可以使用find()
,只需传入1作为限制参数。
答案 1 :(得分:0)
提前离开循环尝试:
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)