python - 从页面中抓取特定的重复元素
问题描述
我在刮这个时遇到了一些问题:
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa">
在这个字符串之前,我发现已经有 4 个相同但具有不同标记值的字符串,我如何使用 beautifulsoup 刮掉 6 个中的第 5 个?
不幸的是,由于我正在从事私人项目,因此我无法提供代码或网站的示例,在将我的问题标记为不完整之前,请提出一些问题,ty!
解决方案
您可以通过<input>
两种方式获取第 5 个标签。
使用
select_one()
- 选择第 5 个<input>
标签x = soup.select_one('input:nth-of-type(5)')
通过
find_all()
属性使用name
- 返回匹配<input>
标签的列表。y = soup.find_all('input', attrs= {'name': '__RequestVerificationToken'})[4]
如果
<input>
整个 HTML 中只有这 6 个标签,则使用select_one()
.
如果您有
<input>
这 6 个以外的其他标签,那么您必须专门选择您需要的输入标签 - 因此您必须使用属性过滤输入标签name = __RequestVerificationToken
。使用find_all()
.
此代码将使用select_one()
和打印第 5 个输入标签的值find_all()
。
from bs4 import BeautifulSoup
s = '''
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa1">
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa2">
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa3">
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa4">
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa5">
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa6">
'''
soup = BeautifulSoup(s, 'lxml')
# Using select_one()
x = soup.select_one('input:nth-of-type(5)')
print(x)
print(x['value'])
# Using find_all()
y = soup.find_all('input', attrs= {'name': '__RequestVerificationToken'})[4]
print(y)
print(y['value'])
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa5"/>
aaa-token-aaa5
<input name="__RequestVerificationToken" type="hidden" value="aaa-token-aaa5"/>
aaa-token-aaa5