Ниже мой код
import pandas as pd
import requests
from bs4 import BeautifulSoup
source = requests.get('https://www.vanglaini.org/').text
soup = BeautifulSoup(source, 'lxml')
for article in soup.find_all('article'):
headline = article.a.text
summary=article.p.text
link = "https://www.vanglaini.org" +article.a['href']
#print(headline)
#print(summary)
#print(link)
#print()
news_csv = pd.DataFrame({'Headline': headline,
'Summary': summary,
'Link' : link,
})
print(news_csv)
Я получил эту ошибку headline = article.a.text AttributeError: у объекта 'NoneType' нет атрибута 'текст'
Помогите!
1 ответ
Как вы уже получили в моих комментариях и в ответе @AmiTavory (удалено) - не во всех статьях есть ссылки, а иногда article.a
дает None
, поэтому у вас есть None.text
, который выдает ошибку.
Вы должны проверить, что article.a
не похож на None
import requests
from bs4 import BeautifulSoup
source = requests.get('https://www.vanglaini.org/').text
soup = BeautifulSoup(source, 'lxml')
for article in soup.find_all('article'):
if article.a is None:
continue
headline = article.a.text
summary = article.p.text
link = "https://www.vanglaini.org" + article.a['href']
print(headline)
print(summary)
print(link)
И это работает.
РЕДАКТИРОВАТЬ . Вы можете получить ошибку
raise ValueError("If using all scalar values, you must pass an index") ValueError: If using all scalar values, you must pass an index
По совершенно другой причине, и вы должны создать новый вопрос на новой странице.
Это проблема в DataFrame
, потому что у вас есть только последнее значение в headline
, summary
, link
, но DataFrame
ожидает списки в
{
'Headline': list_with_headlines,
'Summary': list_with_summaries,
'Link' : list_with_links,
}
Вы должны создать пустые списки перед циклом for
list_with_headlines = []
list_with_summaries = []
list_with_links = []
И внутри for
- цикл, вы должны append()
значения в списки
list_with_headlines.append(headline)
list_with_summaries.append(summary)
list_with_links.append(link)
И позже создайте DataFrame
используя списки
news_csv = pd.DataFrame({
'Headline': list_with_headlines,
'Summary': list_with_summaries,
'Link' : list_with_links,
})
Полный код:
import pandas as pd
import requests
from bs4 import BeautifulSoup
source = requests.get('https://www.vanglaini.org/').text
soup = BeautifulSoup(source, 'lxml')
list_with_headlines = []
list_with_summaries = []
list_with_links = []
for article in soup.find_all('article'):
if article.a is None:
continue
headline = article.a.text.strip()
summary = article.p.text.strip()
link = "https://www.vanglaini.org" + article.a['href']
list_with_headlines.append(headline)
list_with_summaries.append(summary)
list_with_links.append(link)
news_csv = pd.DataFrame({
'Headline': list_with_headlines,
'Summary': list_with_summaries,
'Link' : list_with_links,
})
print(news_csv)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.