【问题标题】:How to isolate the fourth line in a print output?如何隔离打印输出中的第四行?
【发布时间】:2020-12-03 10:43:54
【问题描述】:

我有一个屏幕刮板,可以打印这样的价格

输入:

soup = BeautifulSoup(driver.page_source,"lxml")
for item in soup.select('.valueValue-3kA0oJs5'):
    [elem.extract() for elem in soup("div")]
    print(item.text)
    

输出:

478.40
482.11
476.45
480.62
480.62

+5.15 (+1.08%)

我只希望它打印第四(或第五)行,在本例中为 480.62

我试过这个:

soup = BeautifulSoup(driver.page_source,"lxml")
for item in soup.select('.valueValue-3kA0oJs5'):
    [elem.extract() for elem in soup("div")]
    my_str = str(item.text, end=" ")
    price_list = my_str.split()
    price_list[3] 

但这给出了这个错误:

---> 33    my_str = str(item.text, end=" ")
34         price_list = my_str.split()
35         price_list[3]

TypeError: 'end' is an invalid keyword argument for str()

btw: , end=" " 将所有内容彼此相邻,my_str.split() 用空格分隔它们,并且使用 price_list[3] 我试图隔离第四个。

有人知道怎么做吗?

提前致谢

【问题讨论】:

  • 我有点困惑,因为您没有保存列表理解 [elem.extract() for elem in soup("div")] 的输出。 print(item.text) 是否独立于那行代码?

标签: python python-3.x selenium beautifulsoup printing


【解决方案1】:

您可以使用临时列表来存储元素,而不是尝试将它们连接到一个字符串,这不适用于您使用的语法,因为您只会在每次迭代时覆盖它:

soup = BeautifulSoup(driver.page_source,"lxml")
price_list= []
for item in soup.select('.valueValue-3kA0oJs5'):
    [elem.extract() for elem in soup("div")]
    price_list.append(item.text)
    
print(price_list[3])

请注意,打印命令已删除。您只想在循环完成并且拥有完整的价目表后执行此操作。

【讨论】:

  • 如果我运行它说 ---> 34 print(price_list[3]) IndexError: list index out of range
  • 在这种情况下,您在此表中的项目少于 4 个。在选择项目之前打印完整列表以检查存储的内容。如果您希望它始终有效,您可能需要在尝试打印任何内容之前检查列表的长度。只需使用 if 语句。
  • 是的,在这种情况下,完整的 price_list 如下所示:[''] ['478.40'] ['482.97'] ['476.45'] ['481.77'] ['481.77'] [' '] ['+6.30 (+1.33%)']
  • 这不是一个列表。这是几个列表。您能否编辑原始帖子以显示新代码?我怀疑你可能有一个缩进错误。
猜你喜欢
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多