Парсинг данных по категориями из меню
Надо получить ссылки из меню на 4 категории, потом ссылки из каждой категории а потом уже собрать данные. Загвоздка в получении корректных ссылок. Получаю много лишнего. Как получить именно 4 ссылки:
Также есть проблема с сохранением самого сайта. Он сохраняется со всеми подкатегориями, и при работе с ссылкой "собаки" выдает ссылки на кошек и собак, из-за этого при поиске категорий по ссылке собаки, появляются ссылки и на кошек и получается каша. Как избавится от этого?
import requests
from bs4 import BeautifulSoup
url = 'https://www.spokojenypes.cz'
def get_data(url):
headers ={
"User-Agent": "Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML, like Gecko) Chrome / "
"96.0.4664.93 Safari/537.36OPR/82.0.4227.33"
}
req = requests.get(url, headers)
# запишем в файл страницу, чтоб не долбить сервер
# with open('index.html', 'w', encoding='utf-8') as file:
# file.write(req.text)
with open('index.html', encoding='utf-8') as file:
src = file.read()
soup = BeautifulSoup(src, 'lxml')
link = soup.find('div', {'id':'menu'}).find_all('li', {'data-lvl':'1'})
get_data(url)
# вот так собирает, но из другого места, хочу понять как из главного меню их получить.
link = bs.find('section', {'class':'catTree-LowRes',}).find_all('a')
Ответы (1 шт):
Автор решения: Сергей Шашко
→ Ссылка
import requests
from bs4 import BeautifulSoup
url = 'https://www.spokojenypes.cz'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')
urls = soup.find('ul', {'class': 'categoryTree'}).findAll('li', {'data-lvl': '1'})
for x in urls:
link = x.find('a').get('href')
print(f'{url}{link}')
Результат:
https://www.spokojenypes.cz/chovatelske-potreby-pro-psy/
https://www.spokojenypes.cz/chovatelske-potreby-pro-kocky/
https://www.spokojenypes.cz/ostatni-zvirata/
https://www.spokojenypes.cz/veterinarni-diety/
