Сканирование и загрузка PNG и JPEG - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу сканировать любой веб-сайт и загружать только изображения. Но с помощью следующего кода программа загружает даже картинки, которые присутствуют в теге img. Как я могу выбрать для загрузки только PNG и JPEG?

def fetch_url():
    url = _url.get()
    config['images'] = []
    _images.set(())
try:
    page = requests.get(url)
except requests.RequestException as rex:
    _sb(str(rex))
else:
    soup = BeautifulSoup(page.content, 'html.parser')
    images = fetch_images(soup, url)
    if images:
        _images.set(tuple(img['name'] for img in images))
        _sb('Images found: {}'.format(len(images)))
    else:
        _sb('No images found!.')
    config['images'] = images


def fetch_images(soup, base_url):
    images = []
    for img in soup.findAll('img'):
        src = img.get('src')
        img_url = ('{base_url}/{src}'.format(base_url=base_url, src=src))
        name = img_url.split('/')[-1]
        images.append(dict(name=name, url=img_url))
    return images

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Я бы искал href, заканчивающийся либо .jpeg, либо .png

soup.select("[href$='.png'], [href$='.jpeg']")
0 голосов
/ 17 ноября 2018

Также вы можете использовать регулярные выражения, когда вы найдете тег.

from bs4 import BeautifulSoup
import re
html = """
<html>
  <body>
    <img src="dav.jpg">
    <img src="dav.jpeg">
    <img src="dav.png">
    <img src="dav.pdf"><p>
  </body>
</html>

"""

soup = BeautifulSoup(html,"lxml")
print( soup.find_all("img",src=re.compile(r".*?(?=jpeg|png)")))
# [<img src="dav.jpeg"/>, <img src="dav.png"/>]
0 голосов
/ 16 ноября 2018

Вы пытались добавить только те форматы, которые хотите?

def fetch_images(soup, base_url):
    images = []
    for img in soup.findAll('img'):
       src = img.get('src')
       img_url = ('{base_url}/{src}'.format(base_url=base_url, src=src))
       name = img_url.split('/')[-1]
       if name[-3:] == "png" or name[-3:] == "jpg" or name[-4:] == "jpeg": ### <- here
           images.append(dict(name=name, url=img_url))
    return images
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...