【问题标题】:How to download images in nested tags from a website如何从网站下载嵌套标签中的图像
【发布时间】:2020-04-21 15:22:18
【问题描述】:

我想下载 img 标签中的所有图片,这些图片嵌套在这样的地方:

<div id="onlive">
  <div>
    <section class="class1">
      <ul class=="class2">
        <li>
          <div class="class3">
            <div class="class4 class4-001" video_id="001">
              <div class="class5">
                <img src="https://...">
              </div>
            </div>
          </div>
        </li>
        <li>
          <div class="class3">
            <div class="class4 class4-002" video_id="002">
              <div class="class5">
                <img src="https://...">
              </div>
            </div>
          </div>
        </li>
        <li>...</li>
        <li>...</li>
        <li>...</li>
      </ul>
    </section>
  </div>
</div>

在本例中,应该有 5 张图片要下载并保存在“images”目录中。另外,我想使用“video-id”作为每张图片的名称。

这是我的代码。它没有错误但没有得到任何图像:

import requests
from bs4 import BeautifulSoup
import os
import logging
import urllib.request

url = "https://www...com/onlive" 
page = requests.get(url)

soup = BeautifulSoup(page.text, "html.parser")

links = []
for img in soup.find_all('img'):
    link = img.get('src')
    links.append(link)

for i in range(len(links)):
    filename = 'images/img{}.jpg'.format(i)
    urllib.request.urlretrieve(links[i], filename)

【问题讨论】:

  • 有没有试过打印links看是不是空的?
  • @AndreaOggioni 是的,我已经尝试过了,但什么也没得到。

标签: python html web-scraping beautifulsoup web-crawler


【解决方案1】:

严格基于问题中的示例 html,这应该适用于代码的相关部分:

videos = """your html above, fixed""" #the html you have there is malformed
soup = bs(videos,'lxml')
targets = soup.select('div[class*="class4"]')
for target in targets:
  i= target.attrs['video_id']
  link = target.select_one('img').attrs['src']
  filename = f'images/img{i}.jpg'
  print(filename,link)

输出:

images/img001.jpg https://...
images/img002.jpg https://...

【讨论】:

  • 感谢您的回答。然而,我忘了补充一件事。 &lt;div class="class4-001" video_id="001"&gt; and &lt;div class="class4-002" video_id="002"&gt;。在这种情况下我应该怎么做,因为它们有不同的类名?我更新了我的问题,请检查。
  • 我试过这段代码,但它不起作用。我没有得到任何图像。我应该如何处理网址?从技术上讲,我想下载每个视频的个人资料图片。
  • @belle - 我只关注您问题中的 html。检查 url - 如果它是动态加载的,请求将无法处理它,你将不得不使用 selenium 之类的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2017-04-27
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
相关资源
最近更新 更多