在Python中抓取web抓取下的td元素

时间:2015-03-30 01:55:05

标签: python html web-scraping beautifulsoup

Iam尝试使用JS元素捕获元素,如下所示

 <td align="right" valign="top" class="tabletext2" nowrap="nowrap"> <strong>Program Element Code(s):</strong></td>

网站为http://www.nsf.gov/awardsearch/showAward?AWD_ID=1227110&HistoricalAwards=false

python脚本如下所示

i=1300138;
i=str(i);
url= "http://www.nsf.gov/awardsearch/showAward?AWD_ID="+i+"&HistoricalAwards=false";
r = requests.get (url)
#webbrowser.open(url,new =new );
soup = BeautifulSoup(urllib2.urlopen(url).read())
sp=BeautifulSoup(r.content)
gd=sp.findAll('td',{'class':'tabletext2'},nowrap="nowrap")
for item in gd:
    print item.text;           
    if item.text=="Program Element Code(s):":
        print item.contents;

但我无法让它发挥作用。我需要在程序参考代码前面获取ID 任何帮助表示赞赏。谢谢

1 个答案:

答案 0 :(得分:0)

一种方法是在正确的"class":"tabletext2"之后抓住下一个td:

url= "http://www.nsf.gov/awardsearch/showAward?AWD_ID=1227110&HistoricalAwards=false"
import requests

from bs4 import BeautifulSoup

r = requests.get(url)

tds = BeautifulSoup(r.content).find_all("td",{"class":"tabletext2"})

print([td.find_next("td").text.strip() for td in tds if td.text.startswith("Program Reference Code(s)")])

[u'131E, 113E, 8048, 7433']