如何通过 Beautiful Soup 刮掉href中的文本?
Posted
技术标签:
【中文标题】如何通过 Beautiful Soup 刮掉href中的文本?【英文标题】:How to scrape text in a href by Beautiful Soup? 【发布时间】:2016-06-19 07:09:33 【问题描述】:我有一个<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 onerror="this.src='../UploadFile/Images/no_pic_big.jpg';"
src="../UploadFile/Images/c/1/S_27902.jpg" />
</a>
【问题讨论】:
【参考方案1】:BeautifulSoup
可以在搜索元素时将compiled regular expression pattern 应用于属性值。然后,您可以使用相同的模式来提取所需的部分:
import re
from bs4 import BeautifulSoup
data = """
<a href="javascript:ShowImg('../UploadFile/Images/c/1/B_27902.jpg');">
<img onerror="this.src='../UploadFile/Images/no_pic_big.jpg';"
src="../UploadFile/Images/c/1/S_27902.jpg" />
</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
【讨论】:
我试过你的代码,但是soup.find('a', href=pattern)
返回None
,怎么了?
@mikezang 这个也适合我。你确定你在用BeautifulSoup
解析的输入数据中有这个a
元素吗?
我认为没问题,但我不知道为什么我不能这样做。顺便说一句,我使用的是Python3.5。 brickshelf.com/gallery/mikezang/pics/…
@mikezang 在模式字符串之前注意r
前缀 - 这很重要。
代码中有r前缀,我复制了你所有的代码,没有任何修改!以上是关于如何通过 Beautiful Soup 刮掉href中的文本?的主要内容,如果未能解决你的问题,请参考以下文章