Невозможно получить изображения с веб-страницы с высоким разрешением, используя BeautifulSoup и Python - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть ссылка, которая содержит компьютерные игры, и для каждой игры я хочу извлечь изображение продукта с самым высоким разрешением и не все теги img.Пока у меня есть:

#GET ALL IMG TAGS
img_tags = soup2.find_all('img')
#CREATE LIST WITH IMG TAGS
urls_img = [img['src'] for img in img_tags]
#CHECK EACH IMG TAG
for murl in urls_img:
    filename = re.search(r'/([\w_-]+[.](jpg|png))$', murl)
    if filename is not None:
        with open(filename.group(1), 'wb') as f:
            if 'http' not in murl:
                murl = '{}{}'.format(site, murl)
                #GET THE RESPONSE OF IMG URL
            response = requests.get(murl)
            if response.status_code == 200:
                f.write(response.content)   

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Редактировать: после обсуждения следующее получает начальные URL продукта, исключая заполнители, и посещает каждую страницу в поисках наибольшего изображения. Самое большое изображение имеет атрибут ['data-large_image'].

Я использую Session для эффективности с повторным использованием соединения.

import requests
from bs4 import BeautifulSoup as bs
url = 'http://zegetron.gr/b2b/product-category/pc/?products-per-page=all'
images = []
with requests.Session() as s:
    r = s.get(url)
    soup = bs(r.content, 'lxml')
    product_links = [item.select_one('a')['href'] for item in soup.select('.product-wrapper') if item.select_one('[src]:not(.woocommerce-placeholder)')]

    for link in product_links:
        r = s.get(link)
        soup = bs(r.content, 'lxml')
        images.append(soup.select_one('[data-large_image]')['data-large_image'])

Предыдущий ответ (на основе оригинального единого URL со всеми продуктами):

Попробуйте следующее, чтобы найти атрибут srcset в каждом листинге. Если он присутствует, он берет последнюю указанную ссылку src (так как они упорядочены по возрастанию), в противном случае берется атрибут src.

from bs4 import BeautifulSoup as bs
import requests

r = requests.get('http://zegetron.gr/b2b/product-category/pc/?products-per-page=all')
soup = bs(r.content, 'lxml')
listings = soup.select('.thumb-wrapper')
images = []

for listing in listings:
    link = ''
    if listing.select_one(':has([srcset])'):
        links = listing.select_one('[srcset]')['srcset']
        link = links.split(',')[-1]
        link = link.split(' ')[1]
    else:
        if listing.select_one('[src]:not(.woocommerce-placeholder)'):
            link = listing.select_one('img[src]')['src']
    if link:
        images.append(link)
print(images)
1 голос
/ 13 апреля 2019

Я обнаружил, что это может быть проще, и решил мой вопрос

for each_img_tag in img_tags:
    width = each_img_tag.get('width')
    if width is not None and int(width)>500:
        urls_img.append(each_img_tag['src'])

, хотя я не знаю, быстрее это или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...