Как правильно получить список элементов через BeautifulSoup
При выполнении кода выводится пустой список [], хотя искомые элементы в коде есть и подтягиваются не Ajax'ом, проблема возникает в случае если указываются два и более фильтра то есть find_all('a',class_='item'), при find_all('a'), все работает корректно, печатает все ссылки.
Пример кода:
def get_html(url, params = None):
r = requests.get(url, headers = HEADERS, params = params)
return r
def get_content(html):
soup = BeautifulSoup(html,'html.parser')
items = soup.find_all('a',class_="item-serial")
print(items)
def parse():
html = get_html(URL)
if html.status_code == 200:
get_content(html.text)
else:
print('Error')
parse()
Ответы (2 шт):
Вот эту функцию
def get_content(html):
soup = BeautifulSoup(html,'html.parser')
items = soup.find_all('a',class_="item-serial")
print(items)
как мне кажется, нужно немного переделать
def get_content(html):
soup = BeautifulSoup(html,'html.parser')
# Если ссылки нужно получить то div.a['href'] если названия то div.a.text.strip()
items = [div.a['href'] for div in soup.find_all('div',class_="field_title")]
print(items)
Ну вот так как-то
В вашем коде указано что элемент имеет тип a (эквивалент - <a></a>) и имеет класс class="item-serial", но на странице искомый элемент а находится внутри контейнера div с таким классом, а сам элемент a не имеет классов вообще.
Ваш код можно представить строками:
def get_content(html):
soup = BeautifulSoup(html,'html.parser')
div_elements = soup.find_all('div',class_="item-serial")
a_elements_in_divs = [div_element.find_all('a') for div_element in div_elements]
print(a_elements_in_divs)
В этом коде мы в каждом контейнере с выбранным классом ищем элемент a. В итоге получается список (div) со списками (a).
(Конечный результат можно распаковать, если в этом есть необходимость.)
