beutiful soup, parser, python
Такой вопрос, почему как только я начинаю пюбой сайт парсить дохожу до стадии когда нужно взять из всех блоков ссылки, мой парсер берёт ссылку только из 1 блока, что я делаю не так?
Если что я отдельно сохранил себе файл с html кодом, чтобы не долбить сайт запросами.
def get_data(url):
headers={
"Accept": "*/*",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
}
# req = requests.get(url, headers)
# with open("project.html", "w", encoding="UTF-8-sig") as file:
# file.write(req.text)
with open("project.html", encoding="UTF-8-sig") as file:
src = file.read()
soup = BeautifulSoup(src, "lxml")
element = soup.find_all("div", class_="view catalog clear")
for elements in element:
link = elements.find("div", class_="hover-element").find("a").get("href")
print(link)
get_data("https://www.avangard-sp.ru/catalog/sredstva_individualnoy_zashchity/")
(Import`ы сюда не могу поставить)
Вот код python
Так выглядит код кусочка 1 блорка откуда нужно брать ссылки, мой код работает но берёт только первую ссылку, хотя я всё это делаю в цикле.
<div class="cols col-4">
<div class="hover-element" itemscope itemtype="http://schema.org/Product" id="bx_3966226736_91490">
<div class="gallery">
<div class="img-container" data-src="/upload/resize_cache/iblock/d31/295_295_1/d31325d4e33f2aa7dc9f011239add006.jpg">
<img itemprop="image" src="/upload/resize_cache/iblock/d31/65_65_1/d31325d4e33f2aa7dc9f011239add006.jpg" alt='Полумаска GVS Elipse с фильтром P3 ' >
</div>
</div>
<a href="/catalog/polumaski_filtruyushchie_protivogaznye/polumaska_elipse_integra_p3_ot_nepriyatnykh_zapakhov_spr404ifuc/"
class="element new"
data-article="174782"
>
<img src="/local/templates/main/images/new-icon.png" alt="Новинка" title="Новинка" class="left-icon left-icon-1">
<div class="img-container">
<img src="/upload/resize_cache/iblock/d31/295_295_1/d31325d4e33f2aa7dc9f011239add006.jpg" alt='Полумаска GVS Elipse с фильтром P3 ' class="gallery-main">
</div>
<div class="text-container">
<span itemprop="name" class="name">Полумаска GVS Elipse с фильтром P3 </span>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer" class="whol">
<span class='hidden' itemprop="price">
10640.00 </span>
<span class='hidden' itemprop="priceCurrency">
RUB </span>
<span
class="price" >10 640 руб.</span>
(Опт)
</div>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer" class="retail">
<span class='hidden' itemprop="price">
13835.00 </span>
<span class='hidden' itemprop="priceCurrency">
RUB </span>
<span
class="price">13 835 руб.</span>
(Розница)
</div>
<div class="art">Арт. 174782</div>
</div>
</a>
<div class="button-container clear">
<a id="compareid_91490" data-act="ADD_TO_COMPARE_LIST"
onclick="compare_tov(91490); yaCounter1746979.reachGoal('compare.tovar');" href="javascript:void(0)"
class="button white js-add2compare" >Сравнить</a>
<a href="/catalog/polumaski_filtruyushchie_protivogaznye/polumaska_elipse_integra_p3_ot_nepriyatnykh_zapakhov_spr404ifuc/"
class="button blue js-add2cart"
data-id="91490"
data-section-id="1510"
data-offers="0"
onclick="yaCounter1746979.reachGoal('tovar.to.cart.catalog');"
>
Купить
</a>
</div>
</div>
</div>
Вот ссылка на сайт: https://www.avangard-sp.ru/catalog/sredstva_individualnoy_zashchity/
Ответы (1 шт):
Автор решения: gansior_alexandr
→ Ссылка
Сделайте изменения:
with open("project.html", encoding="UTF-8-sig") as file:
src = file.read()
soup = BeautifulSoup(src, "html")
#element = soup.find_all("div", class_="view catalog clear")
element = soup.find_all("div", class_="hover-element")
for elements in element:
link = elements.find("a").get("href")
print(link)
