При парсинге сайта выводится 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)