python - 试图从以','结尾的字符串中获取所有链接
问题描述
我需要从 Genius 页面获取艺术家专辑的所有链接。所有链接都可以在属性data-preload_data的第五个标签 preload-content值中找到。该值以 str 的形式存储在 var 字符串中。
我试图提取所有以“https://genius.com/albums/”开头并以“,”结尾的链接,但没有成功。当我没有使用 $ 符号结束时,我得到了适量的链接,但没有必要的结束部分
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
from urllib.request import Request, urlopen
import re
name = input('Rapper - ')
url = 'https://genius.com/artists/'+name+''
hdr = {'User-Agent': 'Mozilla/5.0'}
req = Request(url,headers=hdr)
html = urlopen(req)
soup = BeautifulSoup(html, 'html.parser')
hrefs = soup.find_all("preload-content")
string = hrefs[5]['data-preload_data']
result = re.findall('(https://genius.com/albums/'+name+'.,$)', string)
print(result)
解决方案
您可以使用
re.findall(r'(https://genius\.com/albums/' + re.escape(name) + '/[^"\'\s<>]*?)",', string)
请参阅正则表达式演示。
细节
(https://genius\.com/albums/' + re.escape(name) + '/[^"\'\s<>]*?)
- 第 1 组:https://genius\.com/albums/' + re.escape(name) + '/
- 文字子串[^"\'\s<>]*?
"
- 除、'
、 空格<
和之外的任何零个或多个字符>
,尽可能少(由于*?
惰性量词)
",
- 文字字符串
请注意,name
当在正则表达式中使用时,必须对所有特殊字符进行转义,以使正则表达式在语法上正确,因此使用re.escape(name)
.
推荐阅读
- python - 使用 groupby pandas 更改唯一计数
- go - 使用 go get 和自定义端口
- amazon-web-services - 使用 Amazon api 网关用 REST API 包装 graphQL(appsync)
- javascript - 在一个 Div 容器/包装器中选择多个 Div 卡
- phpstorm - 在 PhpStorm 的实时模板中使用数学
- django - AWS ElasticSearch Service 上的身份验证最终失败错误
- python - 分享python脚本/环境变量
- c++ - c++ sqlite回调函数中对象的丢失值
- python - Colab上传的ipynb文件打开失败
- java - Spring Security 页面无法在 Chrome 上的 Iframe 中打开