Скрипт, дающий двойной результат при разборе ссылок - PullRequest
0 голосов
/ 29 октября 2018

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

Мне нужно сохранить формат понимания списка, так как есть несколько страниц, где я могу видеть более одного изображения ссылки. Однако я не хочу использовать set() для удаления этих дублированных ссылок на изображения. Есть ли где-нибудь я ошибаюсь при использовании селектора?

Ссылка на эту веб-страницу

Это моя попытка:

import requests
from bs4 import BeautifulSoup

url = "check_out_the_link_above"

def get_image_links(s,link):
    s.headers["User-Agent"] = "Mozilla/5.0"
    res = s.get(link)
    soup = BeautifulSoup(res.text,"lxml")
    images = [item.get("src") for item in soup.select("img.dp-gallery__image")]
    print(images)

if __name__ == '__main__':
    with requests.Session() as s:
        get_image_links(s,url)

Результат, который я получаю:

['https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg', 'https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg']

Одна ссылка дважды, которую я не хочу.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Исходный веб-сайт имеет ссылку на это изображение дважды, оба в одном классе.

<noscript>
    <li class="dp-gallery__list-item dp-gallery__list-item--orphan">
        <img src="https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg" class="dp-gallery__image" alt="Swale Avenue, Peterborough, Cambridgeshire. PE4">
    </li>
</noscript>

    <li class="dp-gallery__list-item dp-gallery__list-item--orphan">
        <img src="https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg" class="dp-gallery__image" alt="Swale Avenue, Peterborough, Cambridgeshire. PE4">
    </li>

Если вы хотите избежать второго, я бы добавил в ваш поиск еще один фильтр, чтобы убедиться, что вы получите только один из них.

Более простое решение, при условии, что память не является большой проблемой, было бы просто сделать снимки [0].

0 голосов
/ 29 октября 2018

Есть два одинаковых изображения: первое находится внутри узла noscript и скрыто, второе видно.

Лучше всего использовать XPath //img[@class="dp-gallery__image" and not(ancestor::noscript)], но, поскольку bs4 не поддерживает XPath, вы можете попробовать селектор CSS

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