2016-03-05 62 views
2

我有一個格式爲<a href="javascript:ShowImg('../UploadFile/Images/c/1/B_27902.jpg');">的href,我想用'../UploadFile/Images/c/1/B_27902.jpg'得到url。我用了一個笨的辦法得到它:(我想知道是否有一個更簡單的方法來得到它如何通過美麗的湯在href中刪除文本?

url = '<a href="javascript:ShowImg('../UploadFile/Images/c/1/B_27902.jpg');">' 
html = url.get('href') 
html = html.replace('javascript:ShowImg(', '').replace(');', '') 

原來的標籤如下:

<a href="javascript:ShowImg('../UploadFile/Images/c/1/B_27902.jpg');"> 
<img height="110" onerror="this.src='../UploadFile/Images/no_pic_big.jpg';" 
src="../UploadFile/Images/c/1/S_27902.jpg" width="170"/> 
</a> 

回答

2

BeautifulSoup可以申請一個compiled regular expression pattern爲元素搜索時的屬性值,然後你可以用相同的模式,以提取其所需的部分:

import re 
from bs4 import BeautifulSoup 

data = """ 
<a href="javascript:ShowImg('../UploadFile/Images/c/1/B_27902.jpg');"> 
<img height="110" onerror="this.src='../UploadFile/Images/no_pic_big.jpg';" 
src="../UploadFile/Images/c/1/S_27902.jpg" width="170"/> 
</a> 
""" 

soup = BeautifulSoup(data, "html.parser") 
pattern = re.compile(r"javascript:ShowImg\('(.*?)'\);") 

href = soup.find('a', href=pattern)["href"] 
link = pattern.search(href).group(1) 
print(link) # prints ../UploadFile/Images/c/1/B_27902.jpg 
+0

我想你的代碼,但'soup.find(「A」,HREF =模式)'返回'沒有',什麼是NG? – mikezang

+0

我展示了原始標籤,你可以試試嗎? – mikezang

+0

@mikezang這一個也適用於我。你確定在你用'BeautifulSoup'解析的輸入數據中有這個'a'元素嗎? – alecxe