Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Парсинг python , проблема с циклом csv вывода

Проблема такая , написал код парсинга на python , проблема в том , что парсит он все новости на страничке , а вот в файл csv выводит только первую новость со словом в KEYWORD , а все последующие он не проверяет , я так понял проблема в цикле , помогите кто сможет , буду благодарен.(И если можете напишите в целом мои ошибки в коде)

12345678910111213141516171819202122232425262728293031323334353637383940
 import requests 
from bs4 import BeautifulSoup 
import csv 
import re 
HOST = 'http://leslipetsk.ru/' 
 
KEYWORD = "Общественный" 
 
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 ,headers=HEADERS) 
    return r 
 
def get_content(html , keyword): 
    soup = BeautifulSoup(html, 'html.parser') 
    items = soup.find_all('div', class_='entry-content') 
    print(items) 
    result = [] 
    for item in items: 
        text = item.get_text() 
        if keyword in text: 
            result.append(text) 
        return result 
 
def write_csv(result): 
    with open("word.csv", "w") as file: 
        writer = csv.writer(file) 
        for line in result: 
            writer.writerow([line]) 
 
html = get_html(URL) 
result = get_content(html.text , KEYWORD) 
write_csv(result) 
 
По дате
По рейтингу
Аватар пользователя
Просветленный

Проблема в том, что вы возвращаете результат внутри цикла for. Это означает, что функция `get_content` возвращает результат после первой итерации цикла for. Чтобы исправить это, вы должны убрать отступ у строки `return result`, чтобы она находилась на одном уровне с циклом for, а не внутри него.

Вот исправленная версия функции `get_content`:

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