【问题标题】:How to scrape text in a href by Beautiful Soup?如何通过 Beautiful Soup 刮掉href中的文本?
【发布时间】: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 height="110" onerror="this.src='../UploadFile/Images/no_pic_big.jpg';"
src="../UploadFile/Images/c/1/S_27902.jpg" width="170"/>
</a>

【问题讨论】:

    标签: javascript web-scraping beautifulsoup href


    【解决方案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 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
    

    【讨论】:

    • 我试过你的代码,但是soup.find('a', href=pattern)返回None,怎么了?
    • @mikezang 这个也适合我。你确定你在用BeautifulSoup解析的输入数据中有这个a元素吗?
    • 我认为没问题,但我不知道为什么我不能这样做。顺便说一句,我使用的是Python3.5。 brickshelf.com/gallery/mikezang/pics/…
    • @mikezang 在模式字符串之前注意r 前缀 - 这很重要。
    • 代码中有r前缀,我复制了你所有的代码,没有任何修改!
    猜你喜欢
    • 2022-07-20
    • 1970-01-01
    • 2016-10-28
    • 2014-02-08
    • 2021-10-18
    • 1970-01-01
    • 2021-03-11
    • 2018-04-22
    • 2016-02-27
    相关资源
    最近更新 更多