BeautifulSoup找不到标签

2024-04-18 14:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行一个屏幕抓取项目。我一直在使用beautifulsoup从HTML中拉出许多项。有一件东西我好像买不到。在

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

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

当我:

^{pr2}$

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

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

我得到以下错误:

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

我已经用一个针对soup变量的regex确认了标记在那里。在

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

tmp.group(0)


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

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

然后我试着:

tmp = soup.findAll('input')

它莫名其妙地将一堆标记类型转储到tmp中,但不是我需要的类型。它不仅缺少我需要的那个,而且我需要的那个也不见了。在

我错过了什么?在

更新: 我使用了下面的代码,目前还可以使用,但它似乎有点像黑客

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

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

Tags: 项目name标记reidinputsearchvalue
2条回答

这个怎么样:

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

我如何找到这个方法:

首先,我们通过它的id找到这个标签:

^{pr2}$

当您不知道可以使用哪种方法时,为什么不使用dir()?在

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

浏览一下所有的方法,你可能会有一些想法。在

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

  1. soup.input应该给你所有带有<input>标记的注释。你可以对他们做任何你想做的事
  2. soup.find_all("input")而不是{}
  3. soup.find("input", id="sqft")

或者,问题可能是<input>标记通常不与上面所示的开始和结束标记一起使用(<input></input>),而是与形式<input STUFF >一起使用,因此可能会导致问题。在

相关问题 更多 >