【问题标题】:Unable to grab the 'src' tag for an image with Beautiful Soup无法使用 Beautiful Soup 获取图像的“src”标签
【发布时间】:2018-12-18 05:33:41
【问题描述】:

我目前正在开发一个网络抓取工具,以从我学校的报纸网站上下载信息,以便重新上传到我们即将推出的新网站。现在我正在测试如何使用 bs4 从网页下载图像。但是,正如我在下面的代码中所解释的,我无法找到图片的“src”标签,也就是 url,以便下载图片。

import requests, bs4

url = 'https://www.behrendbeacon.com/parkingconcernsaddressed'
res = requests.get(url)
res.raise_for_status()

soup = bs4.BeautifulSoup(res.text)
imgElems = soup.select('img')
print(imgElem[2]) 
# prints <img alt="18160.jpeg" data-type="image" id="comp-jpa6qz48imgimage"/>

所以为了进一步解释:

1.) 如果您使用开发人员工具访问 url 并检查网页,您会明白 imgElem[2] 是我要抓取的新闻文章中的主要图片。下面是一张图片来说明我的意思:

Here's the web page screenshot

2.) 我打印 imgElem[2] 的原因是为了证明 Beautiful Soup 不会使用其余数据抓取“src”标签

简而言之,有人可以解释我错过了什么吗?这种无法获取“src”标签的原因是否在于该网站是一个 Wix 网站?感谢您提供的任何帮助

【问题讨论】:

    标签: python beautifulsoup src


    【解决方案1】:

    可能只是页面需要首先呈现的情况,因为它是动态的。我相信包 requests-html link here 可以做到这一点(尽管如果你试图将它与 Spyder 一起使用,它似乎有一个错误。所以我不太熟悉它。)在某些时候,我将不得不学习/玩弄它。

    同时,我使用Selenium 处理动态页面。 Selenium 在这方面为我工作:

    import bs4 
    from selenium import webdriver 
    
    url = 'https://www.behrendbeacon.com/parkingconcernsaddressed'
    
    browser = webdriver.Chrome()
    browser.get(url)
    
    res = browser.page_source
    
    soup = bs4.BeautifulSoup(res, 'html.parser')
    imgElems = soup.find('img').get('src')
    
    # print (imgElems) 
    # prints https://static.wixstatic.com/media/7384a7_7bb56fcbcb6c48c0875c93a2b6c9821c~mv2.jpg/v1/fill/
    #        w_820,h_151,al_c,q_80,usm_0.66_1.00_0.01/7384a7_7bb56fcbcb6c48c0875c93a2b6c9821c~mv2.webp
    
    browser.close()
    

    【讨论】:

    • * 你可以补充一点,FireFox 也可以用来代替Chrome,但是,gecko webdriver 也必须使用。
    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 2018-08-05
    • 1970-01-01
    • 2019-05-30
    • 2021-02-22
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多