BeautifulSoup无法找到具有特定类的表

时间:2017-06-18 23:19:44

标签: python beautifulsoup

基本上,我试图从下面的给定类标题中提取表中的文本。我已经编写了剩下的代码来从每一行中提取文本,所以我不需要任何帮助。我似乎无法弄清楚为什么我收到这个错误:

$ awk 'NR==FNR{f[$0];next}(!($0 in f))' file2 <(find . -type f -name '*.jpg' -printf '%f\n')
13.jpg

$ rm -iv "$(awk 'NR==FNR{f[$0];next}(!($0 in f))' file2 <(find . -type f -name '*.jpg' -printf '%f\n'))"
rm: remove regular empty file '13.jpg'? y
removed '13.jpg'

代码是:

"ResultSet object has no attribute '%s'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?" % key
AttributeError: ResultSet object has no attribute 'find'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?

2 个答案:

答案 0 :(得分:1)

问题是您写了一个 find_all来查找区域。因此,它会生成一组结果,而不仅仅是一个结果(当然,该集合可以包含一个,零个或多个结果)。我认为有两种选择:

  1. 如果您确定只有一个带有该ID的div(通常只应该有一个,则可以使用find

    region = soup.find('div', {'id': 'inning-all'})
    table = region.find('table', {'class': 'sidearm-table play-by-play'})

    如果有多个:迭代已建立的区域,并单独处理它们:

  2. 如果您确定只有一个带有该ID的div(通常只应该有一个,则可以使用find

    regions = soup.find_all('div', {'id': 'inning-all'})
    for region in regions:
        table = region.find('table', {'class': 'sidearm-table play-by-play'})

答案 1 :(得分:1)

作为替代方案,您可以使用单个CSS selector来解决问题:

table = soup.select_one('#inning-all table.sidearm-table.play-by-play')

其中CSS选择器会将table元素与sidearm-tableplay-by-play类匹配,其中inning-all属性值为select()

使用select_one()代替AppModule来查找与选择器匹配的所有元素。