使用beautifulsoup,如何从页面刮取表头

时间:2014-02-10 15:53:36

标签: python html web-scraping beautifulsoup

我尝试使用不同的代码段来使用bs和python来抓取表头的名称,每次我只返回一个空列表。这是我要提取的值:

<table class="table table-bordered table-striped table-hover data-grid ng-scope">
    <thead>
       <tr>
          <th class="ng-isolate-scope sortable" data-colname="Advertiser" data-colsorter="sorter">
           Advertiser

我想提取的信息是“data-colname”。这就是我尝试过的:

for tx in soup.find_all('th'):
    table_headers.append(tx.get('th.data-colname'))
#this returns an empty list, tried other combinations of this sort ... all returned an empty list

#Another attempt was:
spans = [x.text.strip() for x in soup.select('th.ng-isolate-scope data-colname')]
# returns errors

2 个答案:

答案 0 :(得分:1)

我觉得除去{}从内部的return应该解决问题。

由于th它已经:

get()

或其兄弟姐妹,一次只有一个要处理的元素。 所以,长话短说:

tx

希望这会有所帮助。

答案 1 :(得分:0)

从属性data-colname中提取值的正确方法是使用,例如:

    for tx in soup.find_all('th'):
        table_headers.append(tx['data-colname'])

这是我使用的代码:

    from bs4 import BeautifulSoup
    html = '<table class="table table-bordered table-striped table-hover data-grid ng-scope"> <thead><tr><th class="ng-isolate-scope sortable" data-colname="Advertiser" data-colsorter="sorter">Advertiser</th></tr></thead></table'
    soup = BeautifulSoup(html, 'lxml')
    table_headers = []
    for tx in soup.find_all('th'):
        table_headers.append(tx['data-colname'])

输出:

    >>> print table_headers
    [u'Advertiser']