#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
Я пытаюсь создать веб-скребок, который будет очищать веб-сайт для
from bs4 import BeautifulSoup
import requests
url = 'https://eshop.ciernediery.sk/'
req = requests.get(url, timeout=5)
soup = BeautifulSoup(req.content, 'html.parser')
lst = soup.find_all('li', class_='product_cat-riso')
def fltr(item):
if 'instock' in item:
return True
else:
return False
in_stock = filter(fltr, lst)
for item in in_stock:
print(item)
Комментарии:
1. Пожалуйста, предоставьте минимальный рабочий код (URL …)
2. мой плохой, я его не копировал
3. вы уверены, что это правильный веб-сайт? Я не могу найти ни один из упомянутых вами классов. lst возвращает пустой
4. Я вижу только 1 похожий
product_cat-risografiky
— это правильный URL?5. Вы правы, я просто пытался провести некоторое тестирование и забыл вернуть его обратно, но у меня было это на risografiky при попытке
Ответ №1:
Я буду работать, исходя из предположения, что вы указали только часть одного из имен классов, и это полное имя класса product_cat-risografiky
(единственное из многозначного класса). У меня возникнет соблазн сократить логику fltr()
, а затем убедиться, что проверка членства находится в списке значений класса для тега, а не для объекта тега.
from bs4 import BeautifulSoup
import requests
def fltr(item):
return 'instock' in item['class']
url = 'https://eshop.ciernediery.sk/'
req = requests.get(url, timeout=5)
soup = BeautifulSoup(req.content, 'html.parser')
lst = soup.find_all('li', class_='product_cat-risografiky')
# lst = soup.select('li.product_cat-risografiky')
in_stock = filter(fltr, lst)
for item in in_stock:
print(item)
Комментарии:
1. я не понимаю, как работает item[‘class’], откуда он знает, что такое класс items ?
2. Это метод тега bs4, который возвращает имена классов, связанные с тегом. Вы знаете, что будет хотя бы один класс, поскольку для извлечения списка тегов использовался класс.