Утилита для работы с изображениями работает некорректно - PullRequest
0 голосов
/ 05 октября 2019

Я создаю веб-приложение, которое получает текстовую информацию и изображения из каждой рекламы на сайте. Часть кода, отвечающая за текстовую информацию (работает должным образом):

for a in soup.find_all("div", {"class": "c6e8ba5398--subtitle--UTwbQ"}):
    a = a.text.split(',')
    name.append(a[0])
    sqr.append(a[1])
    floor.append(a[2])
table['Name'] = name
table['Sqr'] = sqr
table['Floor'] = floor

Часть кода, отвечающая за изображения:

for a in soup.find_all("div", {"class": "c6e8ba5398--container--Y5gG9"}):
    photo.clear()
    for b in a.find_all("img", {"class":"c6e8ba5398--image--3ua1b"}):
        photo.append(b['src'])
    photos.append(photo)

Проблема в том, что я получаю список, если спискита же реклама:

[['adv_1_img_1','adv_1_img_2','adv_1_img_3'],['adv_1_img_1','adv_1_img_2','adv_1_img_3']]

Между тем мне нужно что-то вроде этого:

[['adv_1_img_1','adv_1_img_2','adv_1_img_3'],['adv_2_img_1','adv_2_img_2','adv_2_img_3']]

1 Ответ

1 голос
/ 05 октября 2019

См. Ниже (см. Операцию копирования перед добавлением подсписка в основной список фотографий)

import requests
from bs4 import BeautifulSoup
import copy

r = requests.get('https://www.cian.ru/snyat-3-komnatnuyu-kvartiru/')

soup = BeautifulSoup(r.content, 'html.parser')

photos = []
photos_sub_list = []
for div in soup.find_all("div", {"class": "c6e8ba5398--container--Y5gG9"}):
    photos_sub_list.clear()
    for _photo in div.find_all("img", {"class": "c6e8ba5398--image--3ua1b"}):
        photos_sub_list.append(_photo['src'])
    photos.append(copy.deepcopy(photos_sub_list))

for sub_list in photos:
    print(sub_list)

вывод

['https://cdn-p.cian.site/images/8/239/617/kvartira-moskva-presnenskaya-naberezhnaya-716932893-4.jpg', 'https://cdn-p.cian.site/images/8/239/617/kvartira-moskva-presnenskaya-naberezhnaya-716932894-2.jpg', 'https://cdn-p.cian.site/images/8/239/617/kvartira-moskva-presnenskaya-naberezhnaya-716932895-2.jpg', 'https://cdn-p.cian.site/images/8/239/617/kvartira-moskva-presnenskaya-naberezhnaya-716932898-2.jpg', 'https://cdn-p.cian.site/images/8/239/617/kvartira-moskva-presnenskaya-naberezhnaya-716932896-2.jpg']
['https://cdn-p.cian.site/images2/7/393/857/kvartira-moskva-presnenskaya-naberezhnaya-758393739-4.jpg', 'https://cdn-p.cian.site/images2/7/393/857/kvartira-moskva-presnenskaya-naberezhnaya-758393740-2.jpg', 'https://cdn-p.cian.site/images2/7/393/857/kvartira-moskva-presnenskaya-naberezhnaya-758393742-2.jpg', 'https://cdn-p.cian.site/images2/7/393/857/kvartira-moskva-presnenskaya-naberezhnaya-758393743-2.jpg', 'https://cdn-p.cian.site/images2/7/393/857/kvartira-moskva-presnenskaya-naberezhnaya-758393744-2.jpg']
['https://cdn-p.cian.site/images2/8/453/557/kvartira-moskva-presnenskaya-naberezhnaya-755354822-4.jpg', 'https://cdn-p.cian.site/images2/8/453/557/kvartira-moskva-presnenskaya-naberezhnaya-755354822-2.jpg', 'https://cdn-p.cian.site/images2/8/453/557/kvartira-moskva-presnenskaya-naberezhnaya-755354824-2.jpg', 'https://cdn-p.cian.site/images2/8/453/557/kvartira-moskva-presnenskaya-naberezhnaya-755354820-2.jpg', 'https://cdn-p.cian.site/images2/8/453/557/kvartira-moskva-presnenskaya-naberezhnaya-755354823-2.jpg']
...

более короткая версия кода (но не очень читаемая)..) ниже

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.cian.ru/snyat-3-komnatnuyu-kvartiru/')

soup = BeautifulSoup(r.content, 'html.parser')

photos = [[img['src'] for img in div.find_all("img", {"class": "c6e8ba5398--image--3ua1b"})] for div in
          soup.find_all("div", {"class": "c6e8ba5398--container--Y5gG9"})]

for sub_list in photos:
    print(sub_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...