我有一个屏幕抓取项目。我一直在使用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']
答案 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/),您可以尝试以下几种方法:
soup.input
应该为您提供<input>
个标签的所有注释。那么你可以随心所欲地做任何事情soup.find_all("input")
代替soup.findAll("input")
soup.find("input", id="sqft")
或者,问题可能是<input>
标记通常不会与上面显示的开始和结束标记一起使用(<input></input>
),而是使用<input STUFF >
形式,这可能会导致问题。