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

#python #web-scraping #beautifulsoup #python-requests #scrapy

Вопрос:

На этом сайте https://mavin.io/category есть несколько категорий. Затем в каждой категории появляется еще больше категорий и так далее. Когда одна категория была достигнута последней, на ней отображается список продуктов, как на этой странице https://mavin.io/search?q=amp;cat=33695

Я хочу просмотреть все категории и получить ссылку на список продуктов (а не ссылки на продукты), как эта https://mavin.io/search?q=amp;cat=33695

Каким будет решение для очистки этих связанных категорий?

 import requests
from lxml.html import fromstring

url = 'https://mavin.io/category'
r = requests.get(url)
 

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

1. ты видел скрэпи?

2. Да, я им пользовался.

3. затем также поищите BS4, и он проанализирует веб-страницу для вас на наличие ссылок, которые вы затем можете ввести в свой код выше, если вы не хотите просто освободить скрапи, и это все, что он может найти

4. есть какая-нибудь полезная статья по этому поводу?

5. лучше всего начать, как всегда, с оригинальной документации: crummy.com/software/BeautifulSoup/bs4/doc

Ответ №1:

Вы можете создать рекурсивную функцию, которая пересекает все категории, пока не найдет ни одной:

 import requests
from bs4 import BeautifulSoup

url = "https://mavin.io/category"
s = requests.session()


def recur(url, path=None):
    if path is None:
        path = []

    r = s.get(url)
    soup = BeautifulSoup(r.content, "html.parser")
    cat_links = soup.select(".item-image a:has(h4)")
    for a in cat_links:
        yield from recur(
            "https://mavin.io"   a["href"], path   [a.h4.get_text(strip=True)]
        )

    if not cat_links:
        yield r.url, path


for link, path in recur(url):
    print(link, path)
 

С принтами:

 https://mavin.io/search?q=amp;cat=33695 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Consoles amp; Parts']
https://mavin.io/search?q=amp;cat=63691 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Cup Holders']
https://mavin.io/search?q=amp;cat=40017 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Dash Parts']
https://mavin.io/search?q=amp;cat=33698 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Glove Boxes']
https://mavin.io/search?q=amp;cat=179848 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Interior Door Handles']
https://mavin.io/search?q=amp;cat=33696 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Interior Door Panels amp; Parts']
https://mavin.io/search?q=amp;cat=33700 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Pedals amp; Pads']
https://mavin.io/search?q=amp;cat=33701 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Seats']
https://mavin.io/search?q=amp;cat=50458 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Seat Belt Shoulder Pads']
https://mavin.io/search?q=amp;cat=33702 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Seat Covers']
https://mavin.io/search?q=amp;cat=33703 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Shift Knobs amp; Boots']
https://mavin.io/search?q=amp;cat=33704 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Steering Wheels amp; Horns']
https://mavin.io/search?q=amp;cat=46102 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Sun Visors']
https://mavin.io/search?q=amp;cat=50459 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Switches amp; Controls']
https://mavin.io/search?q=amp;cat=33697 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Floor Mats amp; Carpets']
https://mavin.io/search?q=amp;cat=63690 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Cargo Nets, Trays amp; Liners']
https://mavin.io/search?q=amp;cat=33699 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Mirrors']
https://mavin.io/search?q=amp;cat=33705 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Trim']
https://mavin.io/search?q=amp;cat=40018 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Window Cranks amp; Parts']
https://mavin.io/search?q=amp;cat=33706 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Interior', 'Window Motors amp; Parts']
https://mavin.io/search?q=amp;cat=33651 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Exterior', 'Racks']
https://mavin.io/search?q=amp;cat=36475 ['eBay Motors', 'Parts amp; Accessories', 'Car amp; Truck Parts', 'Exterior', 'Body Kits']

...and so on.