Как скачать изображения во вложенных тегах с сайта - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу загрузить все изображения в теге 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)

1 Ответ

0 голосов
/ 21 апреля 2020

На основе строго образца 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://...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...