打印输入字段的name属性

时间:2017-05-22 06:30:24

标签: python beautifulsoup

我试图找到输入字段的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属性的代码有什么问题?

2 个答案:

答案 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