r2d290 Skrevet 12. juli 2011 Del Skrevet 12. juli 2011 Heisann Vil lage et script som går gjennom rapportsenteret på forumet her (for veiledere, moderatorer etc.), og filtrerer ut de emnene som kun har 1 eller 2 ord. Tror jeg skal få til mesteparten på egenhånd, men jeg lurer på hvordan jeg kan bruke urllib (eller noe annet) for å logge inn på brukeren min. Om jeg må bruke noen form for cookie eller noe? Takk for svar Lenke til kommentar
etse Skrevet 12. juli 2011 Del Skrevet 12. juli 2011 Til dette anbefaler jeg Mechanize, et tredjeparts bibliotek som forenkler oppgaven mye. http://wwwsearch.sourceforge.net/mechanize/ Koden under er et eksempel på hvordan det vil fungere. Har et problem med at serveren nekter meg tilgang til enkelte sider selv om jeg er logget inn med den; hvor jeg får beskjed om at den ikke gir tilgang til roboter. Går sikkert ann å unngå dette på en måte også om det skulle vise seg å være et problem. import mechanize, re username = "some_user" password = "some_password" # Login browser = mechanize.Browser() response = browser.open("https://www.diskusjon.no/index.php?app=core&module=global§ion=login") browser.select_form(nr=1) browser['username'] = username browser['password'] = password browser['rememberMe'] = ['1'] reponse = browser.submit() # Test success reponse = browser.open("https://www.diskusjon.no/index.php") reg2 = re.compile("<div id='user_navigation' class='(.*?)'>", re.DOTALL) if reg2.findall(reponse.read())[0] != "logged_in": print "We did not manage to log in! *Sad panda*" exit() # open a website and read content html = browser.open("https://www.diskusjon.no/index.php?app=forums&module=extras§ion=myposts").read() # HTML is now a string with the HTML content of the page Lenke til kommentar
snippsat Skrevet 12. juli 2011 Del Skrevet 12. juli 2011 Noe i denne stilen,med BeautifulSoup til og parse. mechanize er også greit,men denne metoden fungerte bedere for meg på hw. Dette variere fra side til side. BeautifulSoup og lxml er 2 veldig gode parsere for python. Du kjenner vel igjen output import urllib2 from BeautifulSoup import BeautifulSoup import urllib2 url = 'https://www.diskusjon.no/index.php?showforum=341' username = 'username' password = 'password' passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, username, password) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) pagehandle = urllib2.urlopen(url) page = pagehandle.read() soup = BeautifulSoup(page) tag = soup.find("a", {"id": "tid-link-1357940"}) print tag.text '''Ouptput--> Python: Hvordan logge seg inn på diskusjon.no? ''' Lenke til kommentar
Terrasque Skrevet 14. juli 2011 Del Skrevet 14. juli 2011 (endret) Bortsett fra at HW.no bruker form login og session cookies, ikke basic auth. Heller, noe a la: import logging import urllib2, urllib import cookielib import BeautifulSoup username = "foo" password = "bar" L = logging.getLogger("ForumModule") class LogInClass(object): logged_in = False baseurl = "https://www.diskusjon.no/" def __init__(self): # Headers (User agent) to send to the web server self.headers = { 'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' } # Set up url openers and cookie jar self.urlopen = urllib2.urlopen self.request = urllib2.Request self.cookiejar = cookielib.LWPCookieJar() self.opener = urllib2.build_opener( urllib2.HTTPCookieProcessor(self.cookiejar) ) urllib2.install_opener(self.opener) def fetch_url(self, url, post_data=None, headers=None): """ Fetch URL, return a file-like object """ if not url.startswith("http"): url = self.baseurl + url L.debug("Opening URL %s", url) if isinstance(post_data, unicode): L.debug("Encoding unicode POST value to utf8") post_data = post_data.encode("utf8") if post_data: post_data = urllib.urlencode(post_data) L.debug("POST data: %s", post_data) req = self.request(url, post_data, headers or self.headers) return self.urlopen(req) def login(self): base = self.fetch_url(self.baseurl) soup = BeautifulSoup.BeautifulSoup(base) formtarget = soup("form")[0]['action'] logindata = { "username": username, "password": password, } self.mainpage = self.fetch_url(formtarget, logindata).read() self.logged_in = True return self.mainpage def do_stuffs(self): if not self.logged_in: self.login() # Insert spambot logic here Det der er faktisk litt kode sakset fra et prosjekt jeg gjorde tidligere i dag, nettopp for å hente noe data fra en webside man måtte logge inn på, så vet at den metoden virker Har ikke testet mot diskusjon.no - trenger sannsynligvis noen tweaks for det. Også, kan være jeg har glemt å kopiere over noen viktige deler (la ikke merke til noen når jeg leste igjennom tho), så ... Missing parts are left as an exercise for the reader Endret 14. juli 2011 av Terrasque Lenke til kommentar
r2d290 Skrevet 15. juli 2011 Forfatter Del Skrevet 15. juli 2011 Dere er geniale altså! Takker og bukker =) 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å