我正在尝试使用BeautifulSoup从维基百科的信息框中抓取电影信息。我在抓取电影预算方面遇到了麻烦,如下所示。
例如,我想从信息框中剔除“2500万美元”的预算值。鉴于th
和td
标记都不是唯一的,我如何获得预算值? (参见HTML示例)。
说我有值tag = soup.find('th')
<th scope="row" style="white-space:nowrap;padding-right:0.65em;">Budget</th>
- 如何从tag
获得“2500万美元”的价值?
我以为我可以做tag.td
或tag.text
这样的事情,但这些都不适合我。
我是否必须遍历所有标签并检查其文本是否等于“预算”,如果是,请获取以下单元格?
示例HTML代码:
<tr>
<th scope="row" style="white-space:nowrap;padding-right:0.65em;">Budget</th>
<td style="line-height:1.3em;">$25 million<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">[2]</a></sup></td>
</tr>
<tr>
<th scope="row" style="white-space:nowrap;padding-right:0.65em;">Box office</th>
<td style="line-height:1.3em;">$65.7 million<sup id="cite_ref-BOM_3-0" class="reference"><a href="#cite_note-BOM-3">[3]</a></sup></td>
</tr>
答案 0 :(得分:2)
您可以首先找到标记为td
且标记为Budget
的节点,然后找到其下一个兄弟td
并从节点获取文本:
soup.find("th", text="Budget").find_next_sibling("td").get_text()
# u'$25 million[2]'
答案 1 :(得分:0)
要获取<td>
代码中的每个金额,您应该使用
tags = soup.findAll('td')
然后
for tag in tags:
print tag.get_text() # To get the text i.e. '$25 million'
答案 2 :(得分:0)
您需要的是BeatifulSoup中的find_all()方法。
例如:
tdTags = soup.find_all('td',{'class':'reference'})
这意味着当class ='reference'时,你会找到所有'td'标签。
只要在预期的td标签中找到唯一属性,就可以找到所需的任何td标签。
然后你可以做一个for循环来找到内容,就像@Bijoy说的那样。
答案 3 :(得分:0)
另一种可能的方式可能是:
application.cfc