Ваша проблема в этой строке:
content = soup.find("div", {"class":"section-content"}).find_all('p')
find_all()
получает все теги <p>
, но только в результатах .find()
- что просто возвращает первый пример, который соответствует критериям. Таким образом, вы получаете все теги <p>
в первом div.section_content
. Не совсем понятно, какие критерии подходят для вашего случая использования, но если вам нужны все теги <p>
, которые вы можете использовать:
content = soup.find_all('p')
Затем вы можете scrape_urls()
объединить текст тега <p>
и вернуть его вместе с заголовком:
content = '\r'.join([p.get_text(strip=True) for p in content])
return title, content
Вне функции вы можете построить фрейм данных:
url_list = urls['url'].tolist()
results = [scrape_url(url) for url in url_list]
title_list = [r[0] for r in results]
content_list = [r[1] for r in results]
df = pd.DataFrame({'url': url_list, 'title': title_list, 'content': content_list})