【问题标题】:Replace multiple try codes with loop function - searching in HTML用循环函数替换多个尝试代码 - 在 HTML 中搜索
【发布时间】:2021-02-01 04:15:14
【问题描述】:

我正在尝试从网站下载文件。 URL 在页面的 HTML 中,我能够找到正确的,但各种视频的每秒帧数 (fps) 不同。我有多个 try 函数,如 here 所见,但很难遵循,所以我尝试了 here 所见的循环函数。

这就是我所拥有的:

    import re
    for [j] in range(23,24,25,26,27,28,29,30,31):
        try:

            result = re.search('"width":1280,"mime":"video/mp4","fps":[j],"url":(.*),', s)

            extractedword=result.group(1)

            commapos=extractedword.find(",")

            link=extractedword[:commapos].replace('"',"")
        except:
            pass
        print(title)
        print(link)

输出消息状态为range expected at most 3 arguments, got 9

关于如何搜索正确的 URL 有什么建议吗?几天来,我一直在努力完成这项工作。谢谢!

编辑: 我应该添加一个标题的 URL,它只存在于一个 FPS 中,以设置的分辨率存在。各种标题存在于各种 FPS 中,但每个标题仅在一个 FPS 中提供所需的分辨率。部分解决方案循环返回“下载错误重试”。

【问题讨论】:

  • 你应该阅读一下使用range()的正确语法

标签: python selenium loops beautifulsoup


【解决方案1】:

改用此代码:

import re

s = # Put what s equals here

for j in range(23, 32):
    try:

        result = re.search('"width":1280,"mime":"video/mp4","fps":[j],"url":(.*),', s)

        extractedword = result.group(1)

        commapos = extractedword.find(",")

        link = extractedword[:commapos].replace('"', "")
    except:
        pass
    else:
        print(title) # Also make sure to define title somewhere
        print(link)

【讨论】:

  • 返回现在表明下载错误正在循环重试。我将我的问题编辑得更具体,如果我一开始不清楚,对不起
【解决方案2】:

range 接受三个参数:start,stop,step。所以试试这个:

# other variables
import re
for j in range(23,31):
  try:
    result = re.search('"width":1280,"mime":"video/mp4","fps":[j],"url":(.*),', s)
    extractedword=result.group(1)
    commapos=extractedword.find(",")
    link = extractedword[:commapos].replace('"',"")
  except:
    pass
  else:
    print(title)
    print(link)

【讨论】:

  • 返回现在表明下载错误正在循环重试。我将我的问题编辑得更具体,如果我一开始不清楚,对不起
【解决方案3】:

你真的不需要range 甚至这里的循环。有很多问题,

  1. 没有正确调用rangestart, stop, step
  2. 永远不要将j 作为regex 的一部分

鉴于此问题,请注意帧速率会发生变化,如果发生这种情况,regex 可能无法匹配。一个简单、更优雅的解决方案是更新您的 regex 以匹配所有可能存在的帧速率。

2[3-9]|3[0-1]

上述正则表达式将匹配从 23 到 31 的所有数字。如果我们将其指定为捕获组,如果我们想存储帧速率,也可以稍后通过搜索访问它。

import re

s = '"width":1280,"mime":"video/mp4","fps":25,"url":test.com'

result = re.search('"width":1280,"mime":"video\/mp4","fps":(2[3-9]|3[0-1]),"url":(.*)', s)

result.group(1)
#'25'
result.group(2)
#'test.com'

从这里你可以继续修改你想要的输出。有关regex的更深入解释,您可以在regex101查看计算步骤

【讨论】:

  • 返回现在表明下载错误正在循环重试。我将我的问题编辑得更具体,如果我一开始不清楚,对不起
猜你喜欢
  • 2019-04-07
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2017-01-13
  • 2014-09-06
相关资源
最近更新 更多