kjeita Skrevet 18. oktober 2016 Del Skrevet 18. oktober 2016 Jeg prøver å laste ned automatisk en masse filer fra en side, men har støttet på et problem. Det går greit å bruke Beautiful Soup til å navigere til sidene hvor informasjonen om nedlastingen er, men der stopper det opp. For å laste ned så trenger jeg Cookie, og PHP SSID virker det som; siden noe jeg tok ut fra nettleseren virker: wget --header='Host: www.example.com' --header='User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0' --header='Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' --header='Accept-Language: en,en-US;q=0.5' --header='DNT: 1' --header='Referer: https://www.example.com/board.php?bo_table=newsletters&wr_id=10325&sfl=wr_subject&stx=mondays' --header='Cookie: __cfduid=d3181cef717a06059c6bdd43a6d81beb31476742378; PHPSESSID=58ig5rp6i3ho6d7l0cib1kuo83; e1192aefb64683cc97abb83c71057733=dG9ycmVudF9rb3J0dl9lbnQ%3D' --header='Connection: keep-alive' 'https://www.example.com/download.php?bo_table=newsletters&wr_id=10325&no=0&sfl=wr_subject&stx=mondays' -O 'monday.161017.pdf' -c Hva kan jeg bruke for å få informasjonen jeg mangler? Kanskje noe basert på PhantomJS, eller noe annet? Det skal skje hodeløst på server. Lenke til kommentar
kjeita Skrevet 19. oktober 2016 Forfatter Del Skrevet 19. oktober 2016 Fikk til noe, men pent er det ikke. headers= { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0' } r = requests.get(url, headers=headers) wget_call = "wget --header='Host: www.example.com' --header='User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0' --header='Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' --header='Accept-Language: en,en-US;q=0.5' --header='DNT: 1' --header='Referer: https://www.example.com/board.php?bo_table=newsletters&wr_id=10325&sfl=wr_subject&stx=mondays' --header='Cookie: __cfduid=" + r.cookies['__cfduid'] + "; PHPSESSID=" + r.cookies['PHPSESSID'] + "' --header='Connection: keep-alive' 'https://www.example.com/download.php?bo_table=newsletters&wr_id=10325&no=0&sfl=wr_subject&stx=mondays' -O 'monday.161017.pdf' -c subprocess.call(wget_call, shell=True) Er det andre måter? Hvordan blir jeg kvitt shell=True på denne? Lenke til kommentar
snippsat Skrevet 20. oktober 2016 Del Skrevet 20. oktober 2016 (endret) Jeg prøver å laste ned automatisk en masse filer fra en side, men har støttet på et problem. Det går greit å bruke Beautiful Soup til å navigere til sidene hvor informasjonen om nedlastingen er, men der stopper det opp. For å laste ned så trenger jeg Cookie, og PHP SSID virker det som; siden noe jeg tok ut fra nettleseren virker: Når det gjelder sånne problem bruker jeg ofte Selenium/PhantomJS, og sender kilekoden til Beautiful Soup for parsing. Hvordan blir jeg kvitt Hvordan blir jeg kvitt shell=True på denne?på denne? Ja ikke bruk shell=True, Du må dele opp kommandoen i en liste(bruk shlex.split() som hjelp til og dele opp). Det hadde vel vært mulig skrevet det hele i Requests og droppet wget og subprocess. Du kan se på en post jeg hadde her. Dette er da et alternativ hvor jeg bruker nettleser(Firefox) egen nedlasting metode igjennom Selenium. Endret 20. oktober 2016 av snippsat Lenke til kommentar
kjeita Skrevet 21. oktober 2016 Forfatter Del Skrevet 21. oktober 2016 Jeg hadde prøvd shlex før, men vet ikke hvorfor det ikke virket da, jeg fikk den til å virke nå vel å merke, så shell=True er borte Pure Requests gav meg ikke resultat, i allefall ikke .content og .raw. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå