Python 无法访问子项';在BeautifulSoup中的属性

Python 无法访问子项';在BeautifulSoup中的属性,python,list,beautifulsoup,Python,List,Beautifulsoup,我正在尝试将HTML表转换为2d python列表(列表列表列表)。其中三个“列”只是相应HTML表格单元格的文本,可以正常工作。但是,一个“列”应该只是相应HTML单元格中链接的id,但我无法访问该属性 当我试图获取链接的id时,问题就出现了。如果我打印该元素的.contents,它只会说“Action”。当我试图访问该元素的['id']索引时,它会给我一个错误。怎么了 bs = BeautifulSoup(page) table = bs.find("table", id=

我正在尝试将HTML表转换为2d python列表(列表列表列表)。其中三个“列”只是相应HTML表格单元格的文本,可以正常工作。但是,一个“列”应该只是相应HTML单元格中链接的id,但我无法访问该属性

当我试图获取链接的id时,问题就出现了。如果我打印该元素的.contents,它只会说“Action”。当我试图访问该元素的['id']索引时,它会给我一个错误。怎么了

    bs = BeautifulSoup(page)

    table = bs.find("table", id="ctl00_ContentPlaceHolder1_Name_Reports1_TabContainer1_TabPanel1_dgReports")

    def notHeader(css_class):
        return css_class is not "gridviewheader"

    rows = table.find_all("tr", class_=notHeader)

    result = []

    for x in range(0, len(rows)):
        allcols = rows[x].findAll('td')

        tempRow = []
        print(allcols[0].contents[0])  #only prints Action
        tempRow.append(allcols[0].contents[0]['id'])  #TypeError: string indices must be integers
        tempRow.append(allcols[2].string)
        tempRow.append(allcols[3].string)
        tempRow.append(allcols[5].string)
        amended = -1
        for existing in result:
            if tempRow[1] == existing[1] and tempRow[2] == existing[2]:
                amended = 1
        if amended == -1:
            result.append(tempRow)

    print (ids)

找到答案:它必须使用find_all()中的函数来消除标题行。我用替换了find_all行

rows = table.find_all("tr")[1:]

因为标题始终是第一行,并且它可以工作

如果只打印
Action
,则
contents[0]
navigablesting
对象;换言之,网页文本。
id
属性可能在
标记上?在这种情况下,请使用
allcols[0].attrs['id']
allcols[0]['id']]
@MartijnPieters:如果出现错误,它会以某种方式变成字符串,这是有道理的。但我不知道它在哪里从一个autifulscope对象切换到一个字符串?
NavigableString
是一个漂亮的ulsoup对象。只是不是标签。毕竟,你的HTML内容树不仅仅由标签组成。啊,我明白了。有没有办法分辨树的哪一部分是标记,哪一部分是字符串?另外,写下你的第二条评论,我检查过了,相关的id字段在链接上,而不是