如何使用BeautifulSoup提取表信息?

时间:2013-02-18 23:29:48

标签: python web-scraping beautifulsoup

我正试图从这些pages中抓取信息。

我需要InternshipResidencyFellowship下的信息。我可以从表中提取值,但在这种情况下,我无法决定使用哪个表,因为标题(如Internship)作为简单的纯文本存在于表外的div标记下,并且之后,该表存在其我需要提取的值。我有很多这样的页面,并不是每个页面都有这些值,就像某些页面Residency可能根本不存在一样。 (这会减少页面中的表总数)。此类页面的一个示例是this。在此页面中Internship根本不存在。

我面临的主要问题是所有表都具有相同的属性值,因此我无法确定将哪个表用于不同的页面。如果页面中没有我感兴趣的任何值,我必须为该值返回一个空字符串。

我在Python中使用BeautifulSoup。有人可以指出,我怎样才能继续提取这些值。

1 个答案:

答案 0 :(得分:1)

看起来标题和数据的ID都有唯一的值和标准后缀。您可以使用它来搜索适当的值。这是我的解决方案:

from BeautifulSoup import BeautifulSoup

# Insert whatever networking stuff you're doing here. I'm going to assume
# that you've already downloaded the page and assigned it to a variable 
# named 'html'

soup = BeautifulSoup(html)
headings = ['Internship', 'Residency', 'Fellowship']
values = []
for heading in headings:
    x = soup.find('span', text=heading)
    if x:
        span_id = x.parent['id']
        table_id = span_id.replace('dnnTITLE_lblTitle', 'Display_HtmlHolder')        
        values.append(soup.find('td', attrs={'id': table_id}).text)
    else:
        values.append('')

print zip(headings, values)