Kilka tematów połączonych, ale postaram się podzielić swoją odpowiedź logicznie na części.
Ad: 1. Tak jak ktoś już wyżej pisał - istnieją przeglądarki tekstowe działające w terminalu (lynx, links, links2, elinks, w3m) czy np. w emacs (w3m). Jeśli jednak chodzi o samo "przeglądanie stron w python" to musisz powtórzyć proces wywołania strony (request http) do serwera. Czyli możesz użyć urlllib, lub requests (ewentualnie np. grequests jeśli chcesz wiele stron asynchronicznie). Rezultatem wywołania HTTP będzie odpowiedź serwera, zawierająca m. in. status i content. Zakładając, że wywołanie nie miało błędów (status 2xx) otrzymasz to co serwer zwraca (czyli response). Odpowiedź ta będzie zawierała nagłówki HTTP (wśród nich m.in. content-length czy content-type + charset) oraz samą treść strony (html). Zakładając, że chcesz się pozbyć tagów html - możesz użyć BeautifulSoup lub podobnego parsera (coś a'a lxml, xpath, etc.). Taka biblioteka jest przeważnie potrzebna dlatego, że wiele stron nie jest poprawna składniowo, więc parser działający "strict" po prostu zgłosi błąd (porównaj z DTD). Zakładając użycie bibliotek (np. request) w wielu przypadkach otrzymasz poprawnie zakodowany text, natomiast może się zdarzyć, że twoja strona źródłowa będzie np. chińska, węgierska, lub mieszana (np. zażółć gęślą jaźń لوحة المفاتيح العربية ) i będziesz musiał odpowiednio zdekodować ten tekst. Tutaj dochodzimy do nagłówków (content-type -> charset) i tego typu rzeczy. Tutaj pomocne mogą być takie wynalazki jak np. moduł chardet.
Ad 2. "Jeśli przeglądam internet z użyciem tor'a w pythonie to jest to sposób jakoś mniej bezpieczny, zostawiający więcej śladów niż ta standardowa przeglądarka tor'a ?"
Prawdopodobnie tak. A przynajmniej będzie to wprost proporcjonalne do twojej świadomości tego scenariusza. Zakładam, że mając na myśli "tor" mówimy tu o jakimś konkretnie wydzielonym środowisku (np. vm z kontrolowanym przez ciebie serwerem dns). Oczywiście zostają kwestie "odcisku" twojej "przeglądarki", czyli pythona, który wysyła takie czy inne nagłówki (user-agent, accept, itd.). Dodatkową kwestią jest np. obsługa przekierowań (zakładając, że automatycznie obsługujesz kody 3xx (follow redirects)). Przeglądarki przygotowany do sieci tor są zabezpieczone przez wieloma ze sposobów deanonimizacji tora (nawet z wewnątrz vm) - requestów STUN, webrtc, itd.
Zakładając "gołego pythona" raczej cię to wszystko nie dotyczy, choć może zależeć od użytych bibliotek.
Możliwości jest wiele, natomiast to, że nie masz obsługi czcionek/pluginów/nie raportujesz wielkości viewport, będą świadczyć o unikalności twoich requestów. Zatem czy jest to sposób "jakoś mniej bezpieczny" - prawdopodobnie tak, ale to zależy jakiego poziomu bezpieczeństwa oczekujesz.
Ad. 3. "Czytałem na stronie Richarda Stallmana..."
Nie do końca to rozumiem, natomiast protokół HTTP nie ma nic wspólnego z emailem (w omawiany przypadku SMTP), oprócz tekstowego formatu komunikacji.
No i jeśli chodzi o Richarda Stallmana, to miej na uwadze, że używa on komputera z wolnym biosem, większość czasu spędza w trybie tekstowym, jego systemem operacyjnym jest pewnie Guix, no i w wywiadach można przyuważyć, że musi czasem przerwać komunikację video ponieważ jego komputer się przegrzewa wtedy (pomimo wentylatora pokojowego skierowanego wprost na ekran /co powoduje szumy kamery/ - prponuję np. oglądnąć wywiad na yt na kanale Briana Lunduke'a).
Richard Stallman to światły człowiek, natomiast nie do końca rozumiem - czy ty zmierzasz do konfiguracji swojego środowiska w podobny sposób? W takim razie zacząłbym od zainstalowania emacs (polecam) i solidnego kursu LISP (z perspektywy emacs oraz guix).
TurkucPodjadek