我试图找到输入字段的name属性,其中type = name。
import bs4 as bs
import urllib.request
import requests
import webbrowser
import urllib.parse
url = "http://demo.testfire.net/default.aspx"
sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce,"html.parser")
form = soup.find('form')
inputs = form.find_all('input')
print(inputs.name)
错误:ResultSet对象没有属性' name'。 您可能正在处理像单个项目一样的项目列表。 当你打算调用find()时,你调用了find_all()吗?
打印输入字段的name属性的代码有什么问题?
答案 0 :(得分:2)
将find_all()
方法替换为find()
,然后使用属性名称获取值。这是一个dictionary
。
form = soup.find('form')
inputs = form.find('input', type='text')
print(inputs['name'])
另一种方式:
form = soup.find('form')
inputs = form.find('input', type='text').get('name')
print(inputs)
第二种方式更安全。因为如果没有name
属性,它将返回None
,但在第一种方式中它会返回KeyError
。
答案 1 :(得分:0)
import bs4 as bs
import requests
url = "http://demo.testfire.net/default.aspx"
sauce = requests.get(url).content # also okay to use urllib.urlopen(url).read() by importing urllib
soup = bs.BeautifulSoup(sauce,"html.parser")
form = soup.find('form')
inputs = form.find_all('input') # here you get single or multiple 'bs4.element.Tag' in 'bs4.element.ResultSet'
# hence you need to iterate all result as below
for elements in inputs:
print(elements.get('name')) # you will get txtSearch and None
如果您确定只获得第一个或最后一个标记属性,则可以将输入视为列表和访问元素,其索引如下所示:
inputs[1].get('name')
如果您总是需要首先访问第一个元素,请更好地遵循@MD提供的步骤。 Khairul Basar