links.append() не отображает все ссылки на изображения в виде списка

#html #image #image-processing #web-scraping #web-crawler

#HTML #изображение #обработка изображений #очистка веб-страниц #веб-сканер

Вопрос:

Мне нужно очистить 29 изображений этого отеля. С помощью приведенного ниже кода выводится каждая ссылка отдельно при каждом запуске ячейки. Несмотря на то, что я использовал links.append(), мне нужно повторно запустить ячейку, чтобы получить другое изображение.

 r = rq.get("https://uk.hotels.com/ho177101/?q-check-out=2020-04-18amp;FPQ=3amp;q-check-in=2020-04-17amp;WOE=6amp;WOD=5amp;q-room-0-children=0amp;pa=1amp;tab=descriptionamp;JHR=2amp;q-room-0-adults=2amp;YGF=2amp;MGT=1amp;ZSX=0amp;SYE=3#:WO")

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

links = []

x = soup.select('img[src^="https://exp.cdn-hotels.com/hotels/1000000/560000/558400/558353"]')

for img in x:
    links.append(img['src'])

#os.mkdir("hotel_photos")

for l in links: 
    print(l)
  

Заранее спасибо!

Ответ №1:

Попробуйте это:

 links = []

x = soup.select('a[href^="https://exp.cdn-hotels.com/hotels/1000000/560000/558400/558353"]')

for img in x:
    links.append(img['href'])
  

Но это будет работать только для этой конкретной ссылки, если вам нужен код, который очистит любую предоставленную вами ссылку, потому что это «https://exp.cdn-hotels.com/hotels/1000000/560000/558400/558353 » меняется в зависимости от отеля, так что это был бы лучший подход:

 x = soup.select("li[id^='thumb-']")
for i in x:
    links.append((next(i.children, None)["href"]))

for l in links: 
    print(l)
  

PS: Если вам нужно после этого загрузить изображения, обязательно замените «amp; w = 82 amp; h = 82» на «amp;w = 773 amp; h = 530», чтобы соответствовать отображаемому изображению.

Комментарии:

1. Я просто отредактировал его, чтобы вы могли передавать любую ссылку и по-прежнему иметь возможность удалять ее без каких-либо проблем.