При парсинге сайта выводится None

Решил написать парсер который собирает все теги из HTML-кода сайта: news.google.com и сохраняет их в .txt файл Но, при запуске программы мне выводит None.

import urllib.request
from bs4 import BeautifulSoup

class Scraper:
    def __init__(self, site):
        self.site = site

    def scrape(self):
        r = urllib.request.urlopen(self.site)
        html = r.read()
        parser = "html.parser"
        sp = BeautifulSoup(html, parser)
        for tag in sp.find_all("link"):
            url = tag.get("href")
            if url is None:
                continue
            if "html" in url:
                print("\n" + url)

news = "https://news.google.com/topstories?hl=ru&gl=RU&ceid=RU:ru"
a = Scraper(news).scrape()
print(a)

f = open("news.txt", "w")
f.write(Scraper(news).scrape())
f.close()

Ответы (2 шт):

Автор решения: user411791

Ошибка банальна - в функции scrape нет return, она ничего не возвращает.

→ Ссылка
Автор решения: arnold

Проблема в вашем коде заключается в том, что метод scrape() не возвращает значение, таким образом, когда вы вызываете Scraper(news).scrape(), он просто выводит данные в консоль и ничего не возвращает.

Кроме того, когда вы вызываете метод scrape() в f.write(), он снова просто выводит данные в консоль, но не возвращает ничего. Вместо этого, вам нужно сохранить все найденные теги в переменную и записать их в файл.

import urllib.request
from bs4 import BeautifulSoup

class Scraper:
    def __init__(self, site):
        self.site = site

    def scrape(self):
        r = urllib.request.urlopen(self.site)
        html = r.read()
        parser = "html.parser"
        sp = BeautifulSoup(html, parser)
        tags = []
        for tag in sp.find_all():
            tags.append(str(tag))
        return "\n".join(tags)

news = "https://news.google.com/topstories?hl=ru&gl=RU&ceid=RU:ru"
scraper = Scraper(news)
tags = scraper.scrape()
print(tags)

with open("news.txt", "w", encoding="utf-8") as f:
    f.write(tags)

→ Ссылка