TypeError:不可用的类型:' slice'使用美丽的小组

发布于 2025-01-30 15:27:13 字数 845 浏览 2 评论 0原文

我希望此代码在for循环的第一个元素之外打印出所有内容。但是我有一个切片错误。

from bs4 import BeautifulSoup
import requests
from openpyxl import Workbook

f = open(r'C:\Users\anilo\Documents\Anilo\Projekte\Python\Verben\Konjugation des Verbs machen _ alle Zeitformen _ Duden.html', 'r', encoding='utf-8')
html_doc = f.read()

soup = BeautifulSoup(html_doc, 'html.parser')

uls = soup.find_all('ul', class_='accordion__list content-column')[1]
for li in uls:
    konjugation = li.text
    konjugation_neu = konjugation.replace('1', '')
    print(konjugation_neu)

输出:

Präteritum
machte (mich/mir)
machtest (dich/dir)
machte (sich)
machten (uns)
machtet (euch)
machten (sich)

li in uls中的LI [1:]:导致错误typeerror:不可用的类型:'sl​​ice'

任何人都知道如何在不编辑的情况下执行技巧我的大部分代码,因为我需要这个面试项目。

提前致谢。

I want this code printing out everything except the first element of the for loop. But I get an slice error.

from bs4 import BeautifulSoup
import requests
from openpyxl import Workbook

f = open(r'C:\Users\anilo\Documents\Anilo\Projekte\Python\Verben\Konjugation des Verbs machen _ alle Zeitformen _ Duden.html', 'r', encoding='utf-8')
html_doc = f.read()

soup = BeautifulSoup(html_doc, 'html.parser')

uls = soup.find_all('ul', class_='accordion__list content-column')[1]
for li in uls:
    konjugation = li.text
    konjugation_neu = konjugation.replace('1', '')
    print(konjugation_neu)

Output:

Präteritum
machte (mich/mir)
machtest (dich/dir)
machte (sich)
machten (uns)
machtet (euch)
machten (sich)

The line for li in uls[1:]: results into an error TypeError: unhashable type: 'slice'

Does anybody know how to do the trick without editing too much of my code, because I need this for my interview project.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦里寻她 2025-02-06 15:27:13

问题是您从resultset中选择一个元素:

soup.find_all('ul', class_='accordion__list content-column')[1]

因此,您无法将其切成薄片 - 删除元素选择并添加您的切片:

uls = soup.find_all('ul', class_='accordion__list content-column')
for li in uls[1:]:
    konjugation = li.text
    konjugation_neu = konjugation.replace('1', '')
    print(konjugation_neu)

注: 您的切片将迭代所有UL,除非第一个 - 如果应该选择第一个切片看起来像[:1]

示例,

以真正获取每个&lt ; li>在您的< ul>切片时,您必须添加额外的迭代:

from bs4 import BeautifulSoup
html_doc='''
<div class="accordion-tables__group"><div class="accordion-table"><ul class="accordion__list sidebar-column dashed"><li class="accordion__item">Hidden title</li><li class="accordion__item">ich</li><li class="accordion__item">du</li><li class="accordion__item">er/sie/es</li><li class="accordion__item">wir</li><li class="accordion__item">ihr</li><li class="accordion__item">sie</li></ul><ul class="accordion__list content-column"><li class="accordion__item">Präsens</li><li class="accordion__item">mache (mich/mir)<sup>1</sup></li><li class="accordion__item">machst (dich/dir)<sup>1</sup></li><li class="accordion__item">macht (sich)<sup>1</sup></li><li class="accordion__item">machen (uns)<sup>1</sup></li><li class="accordion__item">macht (euch)<sup>1</sup></li><li class="accordion__item">machen (sich)<sup>1</sup></li></ul></div><div class="accordion-table"><ul class="accordion__list sidebar-column dashed"><li class="accordion__item">Hidden title</li><li class="accordion__item">ich</li><li class="accordion__item">du</li><li class="accordion__item">er/sie/es</li><li class="accordion__item">wir</li><li class="accordion__item">ihr</li><li class="accordion__item">sie</li></ul><ul class="accordion__list content-column"><li class="accordion__item">Präteritum</li><li class="accordion__item">machte (mich/mir)<sup>1</sup></li><li class="accordion__item">machtest (dich/dir)<sup>1</sup></li><li class="accordion__item">machte (sich)<sup>1</sup></li><li class="accordion__item">machten (uns)<sup>1</sup></li><li class="accordion__item">machtet (euch)<sup>1</sup></li><li class="accordion__item">machten (sich)<sup>1</sup></li></ul></div></div>
'''

soup = BeautifulSoup(html_doc, 'html.parser')

uls = soup.find_all('ul', class_='accordion__list content-column')
for ul in uls[1:]:
    for li in ul.find_all('li'):
        print(li.text.replace('1', ''))
输出
Präteritum
machte (mich/mir)
machtest (dich/dir)
machte (sich)
machten (uns)
machtet (euch)
machten (sich)

Issue here is that you pick a single element from your ResultSet with:

soup.find_all('ul', class_='accordion__list content-column')[1]

So you wont be able to slice it - Remove the element picking and add your slice like this:

uls = soup.find_all('ul', class_='accordion__list content-column')
for li in uls[1:]:
    konjugation = li.text
    konjugation_neu = konjugation.replace('1', '')
    print(konjugation_neu)

Note: Your slicing will iterate all ul except for the first - in case it should only pick the first slice would look like [:1]

Example

To really get each <li> in your <ul> while slicing it you have to add an extra iteration:

from bs4 import BeautifulSoup
html_doc='''
<div class="accordion-tables__group"><div class="accordion-table"><ul class="accordion__list sidebar-column dashed"><li class="accordion__item">Hidden title</li><li class="accordion__item">ich</li><li class="accordion__item">du</li><li class="accordion__item">er/sie/es</li><li class="accordion__item">wir</li><li class="accordion__item">ihr</li><li class="accordion__item">sie</li></ul><ul class="accordion__list content-column"><li class="accordion__item">Präsens</li><li class="accordion__item">mache (mich/mir)<sup>1</sup></li><li class="accordion__item">machst (dich/dir)<sup>1</sup></li><li class="accordion__item">macht (sich)<sup>1</sup></li><li class="accordion__item">machen (uns)<sup>1</sup></li><li class="accordion__item">macht (euch)<sup>1</sup></li><li class="accordion__item">machen (sich)<sup>1</sup></li></ul></div><div class="accordion-table"><ul class="accordion__list sidebar-column dashed"><li class="accordion__item">Hidden title</li><li class="accordion__item">ich</li><li class="accordion__item">du</li><li class="accordion__item">er/sie/es</li><li class="accordion__item">wir</li><li class="accordion__item">ihr</li><li class="accordion__item">sie</li></ul><ul class="accordion__list content-column"><li class="accordion__item">Präteritum</li><li class="accordion__item">machte (mich/mir)<sup>1</sup></li><li class="accordion__item">machtest (dich/dir)<sup>1</sup></li><li class="accordion__item">machte (sich)<sup>1</sup></li><li class="accordion__item">machten (uns)<sup>1</sup></li><li class="accordion__item">machtet (euch)<sup>1</sup></li><li class="accordion__item">machten (sich)<sup>1</sup></li></ul></div></div>
'''

soup = BeautifulSoup(html_doc, 'html.parser')

uls = soup.find_all('ul', class_='accordion__list content-column')
for ul in uls[1:]:
    for li in ul.find_all('li'):
        print(li.text.replace('1', ''))
Output
Präteritum
machte (mich/mir)
machtest (dich/dir)
machte (sich)
machten (uns)
machtet (euch)
machten (sich)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文