3 回答
TA贡献2037条经验 获得超6个赞
从你的开始:
cleanedtitle1=url[58:]
这可行,但它可能对硬编码数字不是很稳健,所以让我们从倒数第二个“/”之后的字符开始。
您可以使用正则表达式来做到这一点,但更简单地说,这可能看起来像:
pos1 = url.rindex("/") # index of last /
pos2 = url[:pos1].rindex("/") # index of second-to-last /
cleanedtitle1 = url[pos2 + 1:]
虽然实际上,您只对倒数第二个和最后一个之间的位感兴趣/,所以让我们更改使用pos1我们发现的中间值:
pos1 = url.rindex("/") # index of last /
pos2 = url[:pos1].rindex("/") # index of second-to-last /
cleanedtitle1 = url[pos2 + 1: pos1]
在这里,这给出了以下值cleanedtitle1
'Rembrandt_van_Rijn_-_Self-Portrait_-_Google_Art_Project.jpg'
现在到你的strip. 这不会完全符合您的要求:它会遍历您提供的字符串,给出该字符串中的各个字符,然后删除所有出现的每个字符。
因此,让我们使用replace, 并将字符串替换为空字符串。
title = cleanedtitle1.replace("_-_Google_Art_Project.jpg", "")
然后我们也可以做类似的事情:
title = title.replace("_", " ")
然后我们得到:
'Rembrandt van Rijn - Self-Portrait'
把它放在一起:
pos1 = url.rindex("/")
pos2 = url[:pos1].rindex("/")
cleanedtitle1 = url[pos2 + 1: pos1]
title = cleanedtitle1.replace("_-_Google_Art_Project.jpg", "")
title = title.replace("_", " ")
return title
更新
我错过了一个事实,即 URL 可能包含%2C我们希望替换的序列。
这些可以使用相同的方式完成replace,例如:
url = url.replace("%2C", ",")
但是您必须对所有可能出现的相似序列执行此操作,因此最好unquote使用urllib. 如果在代码的顶部放置:
from urllib.parse import unquote
那么你可以使用这些替换
url = unquote(url)
在其余处理之前:
from urllib.parse import unquote
def titleextract(url):
url = unquote(url)
pos1 = url.rindex("/")
pos2 = url[:pos1].rindex("/")
cleanedtitle1 = url[pos2 + 1: pos1]
title = cleanedtitle1.replace("_-_Google_Art_Project.jpg", "")
title = title.replace("_", " ")
return title
TA贡献1765条经验 获得超5个赞
这应该有效,让我知道任何问题
def titleextract(url):
title = url[58:]
if "Google_Art_Project" in title:
x = title.index("-_Google_Art_Project.jpg")
title = title[:x] # Cut after where this is.
disallowed_chars = "%" # Edit which chars should go.
# Python will look at each character in turn. If it is not in the disallowed chars string,
# then it will be left. "".join() joins together all chars still allowed.
title = "".join(c for c in title if c not in disallowed_chars)
title = title.replace("_"," ") # Change underscores to spaces.
return title
TA贡献1811条经验 获得超5个赞
有几种方法可以做到这一点:
如果您只想使用内置的 python 字符串函数,那么您可以首先根据 拆分所有内容,/然后剥离所有 URL 的公共部分。
def titleextract(url):
cleanedtitle1 = url.split("/")[-1]
return cleanedtitle1[6:-4].replace('_',' ')
由于您已经在使用 bs4 导入,您可以通过以下方式完成:
soup = BeautifulSoup(htmlString, 'html.parser')
title = soup.title.text
添加回答
举报