我尝试使用不同的代码段来使用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
答案 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']