Top.Mail.Ru
Ответы

Python парсинг csv

Мне нужно было сделать парсинг на python , который выводит текст новостей на странице и ищет в них ключевые слова , но у меня не получается записать значение переменной ключевого слова в csv , буду рад помощи

123456789101112131415161718192021222324252627282930313233
 import requests 
from bs4 import BeautifulSoup 
import csv 
import re 
HOST = 'http://leslipetsk.ru/' 
 
URL = 'http://leslipetsk.ru/?m=202303' 
 
HEADERS = { 
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' ,  
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' 
    } 
 
def get_html(url): 
    r = requests.get(url) 
    return r 
 
def get_content(html): 
    soup = BeautifulSoup(html, 'html.parser') 
    items = soup.find_all('div', class_='entry-content') 
    print(items) 
 
html = get_html(URL) 
get_content(html.text) 
 
def get_text(html): 
    soup = BeautifulSoup(html, 'html.parser') 
    text = soup.find_all('div', class_='entry-content', text=re.compile("совет")) 
    with open("word.csv", "w") as file: 
        writer = csv.writer(file) 
        writer.writerows(text 
            ) 
    print (text) 
Дата
Популярность
Аватар пользователя
2 года назад

Ваш код содержит несколько проблем, в частности, вы пытаетесь записать список объектов BeautifulSoup в CSV файл напрямую, не извлекая содержимое. Вам нужно пройтись циклом по этому списку и извлечь текст из каждого объекта. Кроме того, вы используете функции `get_html` и `get_text`, но нигде не вызываете последнюю, поэтому код CSV записи никогда не будет выполнен.

Попробуйте использовать следующий код в качестве отправной точки:

import requests
from bs4 import BeautifulSoup
import csv
import re

HOST = 'http://leslipetsk.ru/'
URL = 'http://leslipetsk.ru/?m=202303'
KEYWORD = "совет" # Ключевое слово, которое вы ищете

HEADERS = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' ,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
}

def get_html(url):
r = requests.get(url, headers=HEADERS) # Добавляем заголовки
return r.content

def get_content(html, keyword):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='entry-content')
result = []
for item in items:
text = item.get_text()
if keyword in text:
result.append(text)
return result

def write_csv(text):
with open("word.csv", "w") as file:
writer = csv.writer(file)
for line in text:
writer.writerow([line])

html = get_html(URL)
text = get_content(html, KEYWORD)
write_csv(text)

В этой версии кода ключевое слово определено как глобальная переменная KEYWORD, которая передается в функцию get_content. Эта функция ищет новости на странице, содержащие это ключевое слово, и возвращает список строк, соответствующих этим новостям. Функция записи в файл теперь корректно записывает каждую строку в отдельную строку CSV файла.