Python 从style:background url:with beautifulsoup和without regex提取url?

Python 从style:background url:with beautifulsoup和without regex提取url?,python,string,web-scraping,beautifulsoup,Python,String,Web Scraping,Beautifulsoup,我有: 如何使用: >>风格 “如果没有正则表达式,您只需使用str.find和str slice: >>> style '<div ... url(\'/uploads/images/players/16113-1399107741.jpeg\');"' >>> style.split("('", 1)[1].split("')")[0] '/uploads/images/players/16113-1399107741.jpeg' 但是,我认为最好

我有:

如何使用:

>>风格

“如果没有正则表达式,您只需使用
str.find
和str slice:

>>> style
'<div ... url(\'/uploads/images/players/16113-1399107741.jpeg\');"'
>>> style.split("('", 1)[1].split("')")[0]
'/uploads/images/players/16113-1399107741.jpeg'
但是,我认为最好在您的情况下使用regex。

您可以尝试使用该软件包。像这样的方法应该会奏效:

>>> s
"background-image: url('/uploads/images/players/16113-1399107741.jpeg');"
>>> s.find("('")
21
>>> s.find("')")
68
>>> s[21+len("('"):68]
'/uploads/images/players/16113-1399107741.jpeg'
In [1]: s = "background-image: url('/uploads/images/players/16113-1399107741.jpeg');"

In [2]: start = s.find("url('")

In [3]: start
Out[3]: 18

In [4]: end = s.find("');")

In [5]: end
Out[5]: 68

In [6]: url = s[start+len("url('"):end]

In [7]: url
Out[7]: '/uploads/images/players/16113-1399107741.jpeg'
从bs4导入美化组
进口稀土

html=“”“你为什么要在没有正则表达式的情况下成功?@WKPlus我最好奇的是。我读了bs4文档,但什么都找不到,所以我想我可能遗漏了什么。由于某种原因,我这边的样式是空的。它可能是在网页的样式表中搜索,而不是在内联样式属性中搜索?@nikhilvj:我不知道你在使用什么网页或代码。如果您有问题,那么您可以发布一个问题,更好地详细说明您的问题,以防您想禁用输出中不需要的警告消息,请使用
导入日志;cssutils.log.setLevel(logging.CRITICAL)
>>> s
"background-image: url('/uploads/images/players/16113-1399107741.jpeg');"
>>> s.find("('")
21
>>> s.find("')")
68
>>> s[21+len("('"):68]
'/uploads/images/players/16113-1399107741.jpeg'
In [1]: s = "background-image: url('/uploads/images/players/16113-1399107741.jpeg');"

In [2]: start = s.find("url('")

In [3]: start
Out[3]: 18

In [4]: end = s.find("');")

In [5]: end
Out[5]: 68

In [6]: url = s[start+len("url('"):end]

In [7]: url
Out[7]: '/uploads/images/players/16113-1399107741.jpeg'
import cssutils
from bs4 import BeautifulSoup

html = """<div class="image" style="background-image: url('/uploads/images/players/16113-1399107741.jpeg');" />"""
soup = BeautifulSoup(html)
div_style = soup.find('div')['style']
style = cssutils.parseStyle(div_style)
url = style['background-image']

>>> url
u'url(/uploads/images/players/16113-1399107741.jpeg)'
>>> url = url.replace('url(', '').replace(')', '')    # or regex/split/find/slice etc.
>>> url
u'/uploads/images/players/16113-1399107741.jpeg'
sheet = cssutils.css.CSSStyleSheet()
sheet.add("dummy_selector { %s }" % div_style)
url = list(cssutils.getUrls(sheet))[0]
>>> url
u'/uploads/images/players/16113-1399107741.jpeg'
from bs4 import BeautifulSoup
import re
html = """<div class="image" style="background-image: url('/uploads/images/players/16113-1399107741.jpeg');"""

soup = BeautifulSoup(html,'html.parser')
image_div = soup.find('div')['style']

ptr = re.search("http.*[)]",image_div) # regex to search url till ')'
print(image_div[ptr.start():ptr.end()-1]) # end() -1 to remove ')'