【问题标题】:How to slice a Python List Item?如何切片 Python 列表项?
【发布时间】:2020-02-02 16:46:25
【问题描述】:

我在 Python 中尝试了这段代码:

listepositive = soup.findAll('span', attrs{'class':'search_review_summary'})

pos = listpositive[0][3:5]

print(pos)

获取列表正列表 0 字符 3 到 5。 得到 TypeError: unhashable type: 'slice'...?!

你能给我一个提示吗?

【问题讨论】:

  • 你没有得到一个列表,你也没有得到一个字符串。你很可能得到了None,这就是你不能切片的原因。但不可散列数据类型集的一个示例是字典,但由于 bs4 中的 findAll() 返回一个列表,那么奇怪的是您返回的值为 None。
  • print(listpositive) 给你什么?
  • 可能你需要从 findall 方法中创建一个列表,因为它返回一个对象list(soup.findAll(...))
  • 在这种情况下已经有答案了:stackoverflow.com/questions/42885488/…

标签: python beautifulsoup


【解决方案1】:

将 numpy 导入为 np

  #pos = listpositive[0,2:6] you can do this if listpositive is already a numpy array
    newpos = np.array([listpositive])
    newpos[0,2:6]

如果你没有安装 numpy 并且你没问题

【讨论】:

  • 安装numpy 似乎有点过头了
  • numpy需要什么?
【解决方案2】:

以下代码对我有用:

listpositive = soup.findAll('div', class_='row')
if listpositive is not None and len(listpositive) >= 0:
  pos = listpositive[0]
  print(str(pos)[3:5])
else:
  print('could not find any elements')

listpositive 的类型为 ResultSet,而不是 list。 据我了解,您希望从结果集的第一个元素中获取字符 3 到 5,而上面的代码就是这样做的。

我正在抓取结果集的第一个元素,将其转换为字符串,然后对其进行切片以获得第 3 到第 5 个字符。

【讨论】:

  • 谢谢!你没看错!但这是获取角色的最佳做法吗?
  • 如果你只是想获取标签内容的子字符串(同时忽略所有标签属性),那么你真的应该使用.contents这里有更多关于它的信息crummy.com/software/BeautifulSoup/bs4/doc/…
猜你喜欢
  • 1970-01-01
  • 2017-06-24
  • 2015-02-19
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多