繁体   English   中英

f-string 干扰提取 URL

[英]f-string interfering with extracting URLs

tl;f-string 博士正在搞乱下面的脚本。 尽管文件包含 URL 列表,但打印的列表为空。 如何解决此问题并让 Python 打印出 URL?

所以我在下面有一个脚本。 它下载 URL 列表,将其转换为列表,然后将其打印出来。 现在,对于变量link ,有一个 f 字符串。 如果我在 f 字符串中只保留一个值(比如我删除fromdatetodate并只保留username ),它就可以正常工作。 但是如果我在 f 字符串中输入多个值,脚本就会失败。

命令

script.py -u mrbeast

脚本

import argparse, re, requests

parser = argparse.ArgumentParser()
parser.add_argument('-u','--username', required=False)
parser.add_argument('-from','--fromdate', required=False)
parser.add_argument('-to','--todate', required=False)
args = vars(parser.parse_args())
username = args['username']
fromdate = args['fromdate']
todate = args['todate']

link = "https://web.archive.org/cdx/search/cdx?url=twitter.com/{}/status&matchType=prefix&from={}&to={}".format(username,fromdate,todate)
listy = []

m = requests.get(link).text
urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', m)

for b, url in enumerate (urls):
    listy.append(f"{b}: {url}")
    
print(listy)

OUTPUT

[]

您遇到这种行为不是因为 f 字符串,而是因为 python 格式化您的链接的方式。 变量链接中没有使用 f 字符串,只是字符串格式。 当传入 null 值时,python 将 None 输入到 url 中,而不是像预期的那样将它们留空。 这会导致 URL 看起来像这样

https://web.archive.org/cdx/search/cdx?url=twitter.com/None/status&matchType=prefix&from=None&to=None

一种解决方案是使用 or 逻辑运算符告诉 python 如果值为无,则将变量设置为空字符串。 这可以在变量声明中完成。 一种可能的方法如下

username = args['username'] or '' # or logic operator converts variable to '' if None.
fromdate = args['fromdate'] or ''
todate = args['todate'] or ''

我希望这会有所帮助,并欢迎堆栈溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM