Не удается получить все ссылки на разные элементы - PullRequest
0 голосов
/ 24 декабря 2018

Я создал скрипт для сбора ссылок с различных продуктов с веб-страницы.Мое намерение состоит в том, чтобы очищать ссылки, только когда продукты имеют знак Ajouter au panier, что означает Add to BasketСтруктуры html очень просты и с ними легко играть, но логика получения нужных ссылок кажется сложной.Я использовал три разные ссылки, чтобы показать вариацию.

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

проверить вариант

еще один: только каталоги

Это сценарий, который я написал:

import requests 
from urllib.parse import urljoin
from bs4 import BeautifulSoup

urls = (
    "https://www.directmedical.fr/categorie/aspirateurs-de-mucosite.html",
    "https://www.directmedical.fr/categorie/literie.html",
    "https://www.directmedical.fr/categorie/vetement.html"
    )

def get_links(link):
    r = requests.get(link)
    soup = BeautifulSoup(r.text,"lxml")
    for item in soup.select(".browseCategoryName a"):
        ilink = urljoin(link,item.get("href"))
        print(ilink)

if __name__ == '__main__':
    for url in urls:
        get_links(url)

Как я могу получить ссылки на все товары, имеющие Ajouter au panier знаки, используя эти URL?

1 Ответ

0 голосов
/ 24 декабря 2018

Если вам нужно выбрать ссылки на продукты как на начальной странице, так и (если на начальной странице нет товаров) на странице категории, попробуйте

import requests 
from urllib.parse import urljoin
from bs4 import BeautifulSoup

domain = "https://www.directmedical.fr/"
urls = (
    "https://www.directmedical.fr/categorie/aspirateurs-de-mucosite.html",
    "https://www.directmedical.fr/categorie/literie.html",
    "https://www.directmedical.fr/categorie/vetement.html"
    )

def get_links(link):
    r = requests.get(link)
    soup = BeautifulSoup(r.text, "lxml")
    products = soup.select(".browseElements td > a")
    if products:
        for item in products:
            ilink = urljoin(link, item.get("href"))
            print(ilink)
    else:
        categories = [urljoin(domain, item.get("href")) for item in soup.select(".browseChildsCategorys td > a")]
        for category in categories:
            c = requests.get(category)
            c_soup = BeautifulSoup(c.text, "lxml")
            for item in c_soup.select(".browseElements td > a"):
                c_link = urljoin(domain, item.get("href"))
                print(c_link)

if __name__ == '__main__':
    for url in urls:
        get_links(url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...