使用BeautifulSoup和Python在一个结构不良的表中抓取一列

时间:2016-08-10 20:58:29

标签: python beautifulsoup

我正在迭代一个.csv的合同,试图从网站中提取一个列。

以下是该网站的示例:https://www.austintexas.gov/financeonline/contract_catalog/OCCViewMA.cfm?cd=CT&dd=6100&id=13060600641

我想从网页末尾的表格中抓取标有“商品说明”的列。但是,我无法弄清楚如何抓住列 - 只是行。

以下是我目前正在使用的代码

def scraper(first, second, third):
    url = "https://www.austintexas.gov/financeonline/contract_catalog/OCCViewMA.cfm?cd=%s&dd=%d&id=%s" % (first, second, third)
    soup = BeautifulSoup(urllib2.urlopen(url).read())
    foundtext = soup.find('td',text="Commodity Description")
    table = foundtext.findPrevious('table')
    rows = table.findAll('tr')
    second_column = []
    for row in rows:
        print row.contents

我希望最终的输出返回来自该列中所有行的文本,并在行之间返回回车。

有什么想法?

1 个答案:

答案 0 :(得分:2)

对于找到的每一行,找到所有td元素并按索引获取所需的元素:

table = soup.find('td', text="Commodity Description").find_parent("table")
for row in table.select("tr")[2:]:  # skipping the header rows
    cell = row.find_all("td")[1]
    print(cell.get_text())
    print("----")

打印:

WATERLINE REPLACEMENTCONSTRUCTION, PIPELINEPER YUEJIAO LIU, ADD THE REMAINING FUNDS BACK INTO THIS FUNDING LINE  //   PEMBERTON HEIGHTS PHASE III PROJECT  ++   ENC.  $53,209.97
----
WATERLINE REPLACEMENTCONSTRUCTION, PIPELINEPEMBERTON HEIGHTS PHASE III PROJECT
----
WATERLINE REPLACEMENTCONSTRUCTION, PIPELINEPEMBERTON HEIGHTS PHASE III PROJECT
----