У меня есть следующая html-часть, которая повторяется несколько раз с другими ссылками href:
<div class="product-list-item margin-bottom">
<a title="titleexample" href="http://www.urlexample.com/example_1" data-style-id="sp_2866">
Теперь я хочу получить все ссылки href в этом документе, которые находятся непосредственно после тега div с классом «product-list-item». Довольно новичок в beautifulsoup, и ничего из того, что я придумал, не сработало.
Спасибо за идеи.
РЕДАКТИРОВАТЬ: На самом деле не обязательно быть beautifulsoup; когда это можно сделать с помощью регулярного выражения и парсера html python, это тоже нормально.
EDIT2: Что я пробовал (я новичок в python, поэтому то, что я сделал, может быть совершенно глупым с продвинутой точки зрения):
soup = bs4.BeautifulSoup(htmlsource)
x = soup.find_all("div")
for i in range(len(x)):
if x[i].get("class") and "product-list-item" in x[i].get("class"):
print(x[i].get("class"))
Это даст мне список всех «товар-список-элемент», но затем я попробовал что-то вроде
print(x[i].get("class").next_element)
Потому что я думал, что next_element или next_sibling должен дать мне следующий тег, но это просто приводит к AttributeError: объект 'list' не имеет атрибута 'next_element'. Поэтому я попробовал использовать только первый элемент списка:
print(x[i][0].get("class").next_element)
Что привело к этой ошибке: return self.attrs [key] KeyError: 0. Также пробовал с .find_all ("href") и .get ("href"), но все это приводит к тем же ошибкам.
EDIT3: Хорошо, кажется, я узнал, как это решить, теперь я сделал:
x = soup.find_all("div")
for i in range(len(x)):
if x[i].get("class") and "product-list-item" in x[i].get("class"):
print(x[i].next_element.next_element.get("href"))
Это также можно сократить, используя другой атрибут функции find_all:
x = soup.find_all("div", "product-list-item")
for i in x:
print(i.next_element.next_element.get("href"))
Приветствую