我正在进行一个屏幕抓取项目。我一直在使用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']
这个怎么样:
我如何找到这个方法:
首先,我们通过它的id找到这个标签:
^{pr2}$当您不知道可以使用哪种方法时,为什么不使用
dir()
?在浏览一下所有的方法,你可能会有一些想法。在
查看BeautifulSoup的文档(http://www.crummy.com/software/BeautifulSoup/bs4/doc/),您可以尝试以下几种方法:
soup.input
应该给你所有带有<input>
标记的注释。你可以对他们做任何你想做的事soup.find_all("input")
而不是{soup.find("input", id="sqft")
或者,问题可能是
<input>
标记通常不与上面所示的开始和结束标记一起使用(<input></input>
),而是与形式<input STUFF >
一起使用,因此可能会导致问题。在相关问题 更多 >
编程相关推荐