Попробуйте это:
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("a"):
url = tag.get("href")
if url is None:
continue
else:
print("\n" + url)
if __name__ == '__main__':
news = "https://news.google.com/"
Scraper(news).scrape()
Первоначально вы проверяли каждую ссылку, чтобы увидеть, содержит ли она в ней «html». Я предполагаю, что пример, которому вы следовали, проверял, заканчиваются ли ссылки на '.html;
Красивый суп работает действительно хорошо, но вам нужно проверить исходный код на веб-сайте, который вы собираете, чтобы понять за то, как выложен код. Инструменты разработчика в chrome отлично подходят для этого, F12, чтобы получить их быстро.
Я удалил:
if "html" in url:
print("\n" + url)
и заменил его на:
else:
print("\n" + url)