【发布时间】:2016-12-02 19:53:09
【问题描述】:
我正在尝试编写获取网站并跳过前 20 个字符并打印接下来的 100 个字符的代码。
这是我目前的代码:
i = 0
while i <len(urls):
html = urllib.request.urlopen(urls[i])
bsobject = BeautifulSoup(html.read(), "html.parser")
print(bsobject.body[20:120])
i+=1
我运行它,它给了我错误“TypeError: unhashable type: 'slice'”
任何帮助表示赞赏:)
【问题讨论】:
-
bsobject.body是一个对象,要获取其文本,请执行类似bsobject.body.string[20:120] -
bsobject.body是 BeautifulSoupTag对象,而不是字符串。它表示文档正文的解析结构,而不仅仅是字符序列。 -
对您的循环进行旁注。一个更 Pythonic 的循环是
for url in urls:。那么你根本不需要i。 -
无关,但我实际上对这个错误感到惊讶。似乎没有任何方法可以修改现有的
slice对象,那么为什么它不能是可散列的? -
@AndyS 我试过这样做,shell 给了我“TypeError: 'NoneType' object is not subscriptable”。有没有办法解决这个问题?
标签: python python-3.x beautifulsoup