При парсинге страницы, поиск ссылок выдает None в конечный результат

Рейтинг: 1Ответов: 1Опубликовано: 25.03.2023
import requests
from bs4 import BeautifulSoup
url = 'https://calorizator.ru/product'
headers = {
    'accept': '*/*',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 YaBrowser/23.1.5.708 Yowser/2.5 Safari/537.36'
}
req = requests.get(url, headers = headers)
src = req.text
with open('index.html', 'w') as file:
    file.write(src)

soup = BeautifulSoup(src, 'lxml')
state = soup.find_all('ul', class_='product')
for item in state:
    item_text = item.text
    item_links = item.get('href')
    print(f"{item_text} : {item_links}")

Вывод текста отлично работает, но при поиске ссылок выдает None, я даже пробовал менять параметр поиска, но результата это не дало.

Ответы

▲ 0Принят

У Вас в каждом теге ul содержатся ещё теги таблицы li, которые в свою очередь содержат теги a и ссылки href. Как я понял, вы хотите сопоставить ссылки с названиями продуктов. Код который поможет Вам это сделать ниже:

from bs4 import BeautifulSoup
import requests


def main():
    url = 'https://calorizator.ru/product'
    headers = {
        'accept': '*/*',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 YaBrowser/23.1.5.708 Yowser/2.5 Safari/537.36'
    }
    req = requests.get(url, headers = headers)
    src = req.text
    with open('index.html', 'w') as file:
        file.write(src)

    soup = BeautifulSoup(src, 'lxml')
    state = soup.find_all('ul', class_='product')
    main_url = 'https://calorizator.ru'
    for item in state:
        lis = item.find_all('li')
        for li in lis:
            li_text = li.text
            li_link = li.find('a').get('href')
            if li_link[0]=='/':
                print(f"{li_text} : {main_url}{li_link}")
            else:
                print(f"{li_text} : {main_url}/{li_link}")


if __name__ == '__main__':
    main()

Результат:

...
Японская кухня : https://calorizator.ru/product/japan
Детское питание : https://calorizator.ru/product/baby
Спортивное и другое питание : https://calorizator.ru/product/sport
Полный список продуктов : https://calorizator.ru/product/all
Подбор продуктов : https://calorizator.ru/product/choice
Все продукты в картинках : https://calorizator.ru/product/pix
Производители продуктов : https://calorizator.ru/product/brand
Личный кабинет : https://calorizator.ru/cabinet