使用 beautifulsoup 从 img 标签获取 src

Posted

技术标签:

【中文标题】使用 beautifulsoup 从 img 标签获取 src【英文标题】:Getting a src from an img tag using beautifulsoup 【发布时间】:2018-01-07 17:29:53 【问题描述】:

这是我最后一次寻求帮助我正在尝试使用我的不和谐机器人进行一些很酷的嵌入,唯一的问题是我似乎无法从网站上获取 img 任何人都可以帮忙吗?大多数情况下,这是其他人告诉我要使用的,而这里找到的代码不起作用。

async def events(self, ctx):
    """Top GTAO bounses going on right now!"""

    if ctx.message.server.me.bot:
        try:
            await self.bot.delete_message(ctx.message)
        except:
            await self.bot.send_message(ctx.message.author, 'Could not delete your message on ' + ctx.message.server.name)

    url = "https://socialclub.rockstargames.com/" 

    async with aiohttp.get(url) as response:
        soupObject = BeautifulSoup(await response.text(), "html.parser")

    try:
        rm = "[Read More](https://socialclub.rockstargames.com/events)"
        img = "https://i.imgur.com/0Gu4sSK.png"
        avi = "https://i.imgur.com/s5O1yD2.png"
        bonus1 = soupObject.find(class_='bonuses').find('ul').get_text()
        evpic = soupObject.find(class_='eventThumb').find('img').get('src')
        # EMBED
        data = discord.Embed(title='GTA Online Bonuses', description='The Current GTA Online Bonuses', colour=0xE4BA22)
        data.set_author(name='Rockstar Games', icon_url=avi)
        data.add_field(name="This week: \n", value=bonus1)
        data.add_field(name="--------", value=rm)
        data.set_image(url=evpic)
        data.set_thumbnail(url=img)
        a`enter code here`wait self.bot.say(embed=data)


    except discord.HTTPException:
        await self.bot.say("I need the `Embed links` permission to send this OR error")

【问题讨论】:

其中哪一部分不起作用? 试试evpic = soupObject.find('img', 'class' : 'eventThumb' )['src'] 我得到 TypeError: 'NoneType' object is not subscriptable 没有人吗?这是裂口吗? 【参考方案1】:

查看网站,Rockstar 并没有在他们的图片中使用src 标签,因为它是由一些内部 JS 处理的

>>> soup.find(attrs='class':'eventThumb')
<div class="eventThumb">
<img class="lazyload" data-src="https://prod.cloud.rockstargames.com/global/Events/20449/829a53e7-d14e-4de8-a17b-ccb06becfed6.jpg"/>
</div>
>>> _.img
<img class="lazyload" data-src="https://prod.cloud.rockstargames.com/global/Events/20449/829a53e7-d14e-4de8-a17b-ccb06becfed6.jpg"/>
>>> _.get('data-src')
'https://prod.cloud.rockstargames.com/global/Events/20449/829a53e7-d14e-4de8-a17b-ccb06becfed6.jpg'

因此,要修复,您需要将 .get('src') 更改为 .get('data-src')

【讨论】:

有效!谢谢!!

以上是关于使用 beautifulsoup 从 img 标签获取 src的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 BeautifulSoup 从 HTML 中去除评论标签?

BeautifulSoup 创建一个 <img /> 标签

Python 3.8 - BeautifulSoup 4 - unwrap() 不会删除所有标签

关于python中BeautifulSoup多层嵌套下标签内容寻找使用方法。

BeautifulSoup4系列三

python爬虫beautifulsoup4系列3