BeautifulSoup没有找到标签

时间:2015-05-17 21:11:58

标签: python beautifulsoup

我有一个屏幕抓取项目。我一直在使用BeautiflSoup从HTML中提取很多项目。有一件我似乎无法得到的项目。

该项目位于表单的一侧,页面上有多个表单。这是一个输入标签:

<input name="sqft" id="sqft" type="hidden" value="2,855"></input>

当我:

print soup

我可以在结果中看到标签,如上所示,在那里。我转储到一个txt文件,并在我的文本编辑器中验证完整的HTML是汤变量。从那以后,我试过了:

soup.find('input', {'name': 'sqft', 'id' : 'sqft', 'type' : 'hidden'})['value']

我收到以下错误:

TypeError: 'NoneType' object has no attribute '__getitem__'

我已经通过正则表达式确认了标签所在的汤变量。

tmp = re.search('value=\"2,855\"', str(soup))

tmp.group(0)


Out[43]: 'value="2,855"'

我想要一个优雅的解决方案,并且不想使用正则表达式来提取值。

然后我尝试了:

tmp = soup.findAll('input')

莫名其妙地将一堆标签类型转储到tmp中,但不是我需要的那种。它不仅仅缺少我需要的那个,而是我需要的那个缺失。

我错过了什么?

更新: 我已经使用了以下代码,现在可以使用,但似乎 super hacky

tmp = re.search('<input name=\"sqft\"(.*?)>', str(soup))

tmpsqfthtml = "<html>" + tmp.group(0) + "</input></html>"
sqft = BeautifulSoup(tmpsqfthtml).find('input')['value']

2 个答案:

答案 0 :(得分:0)

这个怎么样:

>>>soup.find('input', {'id': 'sqft'}).attrs['value']
'2,855'

我如何找到这种方法:

首先,我们通过其ID:

找到此标记
>>> input = soup.find('input', {'id': 'sqrt'})

如果您不知道可以使用哪种方法,为什么不使用dir()

>>> dir(input)
....many methods here...

浏览所有方法,你可能会得到一些想法。

答案 1 :(得分:-1)

查看BeautifulSoup的文档(http://www.crummy.com/software/BeautifulSoup/bs4/doc/),您可以尝试以下几种方法:

  1. soup.input应该为您提供<input>个标签的所有注释。那么你可以随心所欲地做任何事情
  2. soup.find_all("input")代替soup.findAll("input")
  3. soup.find("input", id="sqft")
  4. 或者,问题可能是<input>标记通常不会与上面显示的开始和结束标记一起使用(<input></input>),而是使用<input STUFF >形式,这可能会导致问题。

相关问题