#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
У меня есть текстовый файл, содержащий несколько URL-адресов, каждый URL-адрес представляет собой статью с текстом и соответствующей им ЦУР (пример одной статьи 1)
Текстовые части статьи находятся в «div.text.-normal.content», а затем в «p», а ЦУР находятся в «div.tax-section.text.-normal.small», а затем в «span»
Для их извлечения я использую следующие строки кода :
data = []
with open('urls_news.txt', 'r') as inf:
for row in inf:
url = row.strip()
response = requests.get(url, headers={'User-agent': 'Mozilla/5.0'})
if response.ok:
try:
soup = BeautifulSoup(response.text,"html.parser")
text = soup.select_one('div.text-normal').get_text(strip=True)
topic = soup.select_one('div.tax-section').get_text(strip=True)
data.append(
{
'text':text,
'topic': topic,
}
)
pd.DataFrame(data).to_excel('text_2.xlsx', index = False, header=True)
except AttributeError:
print (" ")
time.sleep(3)
Но у меня нет результата, я ранее использовал этот код для извлечения информации того же типа с другого веб-сайта с более четким именем класса. Я также пытался ввести «div.text.-normal.content» и «div.tax-section.text.-normal.small», но результат тот же.
Я думаю, что классы, которые я вызываю в этом примере, неверны. Я хотел бы знать, что я пропустил в названиях классов тезисов.
Ответ №1:
Чтобы выбрать текст, который вы можете использовать:
soup.select_one('div.text.-normal.content').get_text(strip=True)
Думаю, что с именами классов что-то не так, просто соедините их с a .
для каждого пробела между ними.
или:
soup.select_one('div.c-single-content').get_text(strip=True)
Чтобы получить темы, как упоминалось, вы можете использовать:
'^^'.join([topic.get_text(strip=True) for topic in soup.select_one('div.tax-section.text.-normal.small').select('a')])
Комментарии:
1. Цель состоит в том, чтобы в конце получить файл формата xlsx с текстом столбца и темами (каждая строка представляет одну статью) для страницы, которую я привел в примере, который я хотел бы, чтобы текст столбца получал текст, начинающийся с «ЦУР обеспечивают основу для решения нескольких приоритетов ….»к «внешним эффектам, возникающим в результате развития инфраструктуры. » и в столбце темы «9. промышленность, инновации …» и «17. партнерство …»
2. Я использовал ваше предложение первой строки для текста, и все в порядке, затем я попробовал soup.select_one(‘div.tax-section.text.-normal.small’).get_text(strip= True) для тем, и все в порядке. Спасибо за вашу помощь