получение значения href BeautifulSoup

#python #beautifulsoup #jupyter-notebook

Вопрос:

я получил ошибку при получении значения href, и в нем говорится: «Объект набора результатов не имеет атрибута «find_all». Вероятно, вы рассматриваете список элементов как один элемент. Вы вызывали find_all (), когда хотели вызвать find ()?», но когда я меняю «find()» в своем коде значения get href, он говорит: «У объекта набора результатов нет атрибута «найти». Вероятно, вы рассматриваете список элементов как один элемент. Вы вызывали функцию find_all (), когда собирались вызвать функцию find()?» вот мой код:

 titles = [] dates = [] links = [] page = 1  while (page lt;= 60):  url = requests.get(f"http://detik.com/search/searchall?query=covidamp;siteid=2amp;sortby=timeamp;page={page}")  soup = bs(url.text, 'lxml')  container = soup.find_all('div', class_='container content')  for l_media in container:  media_cont = l_media.find_all('div', class_='list media_rows list-berita')  for article in media_cont:  article_cont = article.find_all('article')  for title in article_cont:  news_title = title.find('h2', class_='title')  titles.append(news_title.text.strip())  for date in article_cont:  news_date = date.find('span', class_='date')  dates.append(news_date.text.strip())  for a_tag in article_cont.find('a'):  link = a_tag['href']  links.append(link)   page  = 1  

Ответ №1:

Нет необходимости использовать все эти циклы, взгляните на альтернативный подход.

Пример

 from bs4 import BeautifulSoup import requests  data = [] page = 1  url = requests.get(f"http://detik.com/search/searchall?query=covidamp;siteid=2amp;sortby=timeamp;page={page}") soup = BeautifulSoup(url.text, 'lxml')    while (page lt;= 10):  for article in soup.select('div.list-berita article'):  news_title = article.find('h2', class_='title').text  news_date = article.find('span', class_='date').contents[1]  link = article.find('a')['href']   data.append({  'title':news_title,  'date':news_date,  'link':link  })  page  = 1   data  

Комментарии:

1. что означает .содержание[1]?

2. Дочерние элементы тега доступны в списке, который называется .contents «Есть lt;spangt; как первый дочерний элемент», а текст-как второй. Вы также можете пойти .get_text('|', strip=True).split('|')[1] только на свидание