如何在美丽的汤中删除href中的文本?

时间:2016-03-05 13:40:33

标签: javascript web-scraping beautifulsoup href

我有<a href="javascript:ShowImg('../UploadFile/Images/c/1/B_27902.jpg');">格式的href,我希望获得'../UploadFile/Images/c/1/B_27902.jpg'的网址。我用一种愚蠢的方式得到它:(我想知道是否有更简单的方法来获得它。

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>

1 个答案:

答案 0 :(得分: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