Python парсинг csv
Мне нужно было сделать парсинг на python , который выводит текст новостей на странице и ищет в них ключевые слова , но у меня не получается записать значение переменной ключевого слова в csv , буду рад помощи
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)
Ваш код содержит несколько проблем, в частности, вы пытаетесь записать список объектов 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 файла.