Gå til innhold

[python]:[LØST] Problemer med "mechanize".


Anbefalte innlegg

Jobber med et lite script for å logge inn på en webside, og utføre noen enkele faste oppgaver for meg..

 

Jeg klarer å logge inn, og lese HELE html-koden med det første, men når jeg skal navigere meg til en ny side får jeg bare brøkdeler av HTML-koden i output.

Script:

# -*- coding: utf-8 -*-
import mechanize

def Bot(password, username, siteUrl):
br = mechanize.Browser()
br.open(siteUrl)
br.select_form(nr=0)

br["username"] = username
br["password"] = password

response = br.submit()

html = response.read() #om jeg printer denne får jeg ALL html-kode.

print ">>> Logged on!"

openNews = br.open("http://www.minwebside.no/news")

openNews
html = openNews.read()
print html #DENNE PRINTER IKKE ALL HTML-KODE..


if __name__ == '__main__':
   Bot("P4ssWorD", "tROOP4H", "http://www.minwebside.no")

Endret av tROOP4H
Lenke til kommentar
Videoannonse
Annonse

Har lagd en del bot-er i perl og i min erfaring er det er ganske vanlig at du når en side med en redirect etter innlogging på sider med cookie-basert innlogging. Det er som regel her cookien settes og de inneholder sjelden stort av html. Kan det være noe sånt som skjer?

Lenke til kommentar

Vel har et til spørsmål (ser ikke nødvendighet i å starte opp nytt topic, er relevant i forhold til koden).

Jeg ønsker nå å hente ut f.eks askje-kurser fra en webside, kursen som alle vet, den er ikke statisk.

 

Dette er veldig lett i php, men php er laget for web. Da går jeg frem og finner koden som ligger rundt: F.eks

<div align="right">Endring idag:</div>
<div style="float:right;">+1.3%</td>

i php går vi frem med preg_match eller preg_match_all, og løser det med regex. Først henter vi da kildekoden (html)..

 

Kildekoden henter jeg enkelt ved hjelp av mechanize (kan bruke urllib også)

site = br.open("http://www.hegnar.no/tickersok/?ticker=AMD")
html = site.read()

html inneholder nå kildekoden, hvordan henter jeg den lille teksten som ikke er staisk?

 

Edit: Der var den løst også, ved å ta i bruk regex og findall :)

Endret av tROOP4H
Lenke til kommentar
tml inneholder nå kildekoden, hvordan henter jeg den lille teksten som ikke er staisk?

 

Edit: Der var den løst også, ved å ta i bruk regex og findall

Regex er en dårlig kombinasjon med html og xml.

Dette gjelder alle språk.

 

Et artig svar av bobince et av de mest populære svar på stackoverflow.

For python er det 2 veldig gode parsere,BeautifulSoup og lxml

 

Ja det går og hente ut enkelte verdier med regex,har gjort dette mange ganger selv.

Men "webscraping" blir veldig mye enklere når man lærer seg en god parser,som igjen kan kombiners med regex.

 

Et eksempel på en mix av BeautifulSoup/urllib/regex du kan se på her.

https://www.diskusjon.no/index.php?showtopic=1307173

Endret av SNIPPSAT
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...