Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Jak sciagnąc wyrenderowaną zawartość strony (dokładnie sam text)?  (Przeczytany 119 razy)
« : 14:31 19/05/19 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 30
Wiadomości: 427


Ktoś wie jak z poziomu pythona ściągnac zawartość strony (ale nie kod źródłowy) - dokładnie to co renderuje przeglądarka?.

Interesuje mnie coś takiego:
1. Wchodzę na stronę o pewnym adresie
2. Robię CTRL+A i CTRL+C i to co mam teraz w schowku chciałbym zapisać do pliku txt.

Robiłem coś takiego korzystając z selenium, ale szukam mniejszego rozwiązania, idealnie bez żadnych zależności, a jeśli jednak są wymagane to może coś mniejszego niż selenium.
Zapisane
« Odpowiedz #1 : 10:52 21/05/19 »
Guaz Online
Expert Python User

Zobacz profil
****

Reputacja: 69
Płeć: Mężczyzna
Wiadomości: 513


Dawniej napisałem coś (chyba takiego co potrzebujesz) podobnego* spontanicznie dla kumpla z pomocą regexp. Nie jest to najlepsze rozwiązanie, bo do tego najlepiej użyć beautifulsoup jeśli pamięć mnie nie myli, ale może da ci to pewną wskazówkę Uśmiech
Kod
import requests
import re
 
def clean_html_tags(html_plain_text):
   regexp_cleaner = re.compile(r'<.*?>')
   return re.sub(regexp_cleaner, '', html_plain_text)
 
def get_html_tags(html_plain_text):
   regexp_filtered = re.compile(r'<.*?>')
   return re.findall(regexp_filtered, html_plain_text)
 
def main():
   select = input("""\
0 - wyjdź z programu
1 - tekst bez tagów html
2 - tagi z html
Wybierz opcję: "
"")
   if not select:
       exit()
   input_www = input("Podaj stronę:\n http://www.")
   html_plain_text = (requests.get('http://www.'+input_www).text)
   functions = {   '1': clean_html_tags,
                   '2': get_html_tags}
   result = functions.get(select)(html_plain_text)
   print(result)
 
if __name__ == "__main__":
   main()
 
*podobnego, bo musisz sobie dopisać zapis do pliku Mrugnięcie
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #2 : 17:54 24/05/19 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 30
Wiadomości: 427


Dzięki za podpowiedź!

Oglądałem podobne rozwiązania na SO, problemem jest że tekst wynikowy nie zawsze jest w tej samej kolejności co po wykonaniu "kopiuj wszystko do schowka", trzeba też zadbać o przejścia do następnej linii, inaczej wszystkos się zlewa, itp.

Finalnie skorzytsalem z biblioteki html2txt która działa dość dobrze:

Kod
import urllib.request
import html2text
 
html = str(urllib.request.urlopen(URL).read(), encoding='utf-8')
 
h = html2text.HTML2Text()
h.ignore_links = True
print(h.handle(html))



Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot