【问题标题】:Python Beautifulsoup Scraper not scraping imagesPython Beautifulsoup Scraper 不抓取图像
【发布时间】:2020-06-02 10:24:29
【问题描述】:

我有以下代码:-

import requests
from bs4 import BeautifulSoup

url = ""

page = requests.get(url, headers=HEADERS, verify=True)
soup = BeautifulSoup(page.content, 'html.parser')
images = soup.find_all("img")
for image in images:
    image_url = image['src']
    print(image_url)
    if url not in image_url:  #This is to identify absolute/relative links
        link = urllib.parse.urljoin(url, image_url)
    else:
        link = image_url

我正在处理我同意从中抓取图像的数千个 URL。尽管如此,某些图像的 URL 并未被检测到。下面是一个不返回链接的 URL 示例:-

https://www.lerryn-cornwall.co.uk/

查看源码查看,有图片链接如:-

link rel="apple-touch-icon" href="https://primarysite-prod.s3.amazonaws.com/theme/LerrynCofEPrimarySchool/apple-touch-icon-precomposed.png">

对于处理数千个网页中图像链接的每一种可能情况有什么建议吗?我正在考虑而不是寻找 img['src'] 标签,而是简单地处理'soup'并查找包含'.png'的任何字符串,然后将它们附加到列表中。有没有更好的办法?

【问题讨论】:

  • 那是因为图像不是在 html DOM 中定义的,而是在具有background 属性的 css 文件中定义的:background: url(container-home.jpg) center top no-repeat, url(container-tile.jpg) center top repeat-x;
  • 谢谢@johannchopin。我怎样才能用这个修改我的代码?另外,由于我将抓取相当多的网站,鉴于每个网站可能会有所不同,在处理 CSS 时有没有办法更加模糊?所以我可以识别 css 中的任何图像 URL?
  • 你应该定位link标签

标签: python css web-scraping beautifulsoup


【解决方案1】:

正如@johannchopin所说,你也应该抓取每个网站的css文件,你可以通过抓取链接标签通过html找到css文件url,然后你需要在css文件字符串中搜索每个图像的url,尽管此 url 可能存储在与 css 文件相同的目录中,但您应该记住,在 css 文件中,您只会根据 css 文件的存储位置接收文件的位置。如果 css 文件存储在单独的文件夹中,则 img 文件的位置将如下所示 “../img/someimg.png” “..” 符号表示上层目录,就像你回到资源管理器一样,它基本上意味着切换目录到当前文件的父目录。希望对你有所帮助。

【讨论】:

    【解决方案2】:

    尝试关注css selector。检查是否有帮助。

    for item in soup.select('[href*=".png"],[src*=".png"]'):
        print(item)
    

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 2021-06-07
      • 2013-09-28
      • 2016-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 2016-08-08
      • 2018-04-25
      相关资源
      最近更新 更多