"Problem" mit dem Verhalten von urllib2.urlopen()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rajan
User
Beiträge: 3
Registriert: Sonntag 2. Dezember 2007, 16:16

Hallo,
ich verzweifel hier gerade an einer an sich einfachen Sache. Um ein wenig mit urllib2 rumzuspielen hab ich mir gedacht ich bau mal ein Skript was automatisch einen Tipp auf https://millionenklick.web.de abgeben kann. Das rumspielen ist auch der Grund warum ichs an einigen Stelle evtl. etwas übertrieben habe und jede Menge Quatsch mit den Headern veranstallte. Das soll jetzt aber erstmal nicht weiter stören.

Das Problem ist das der letzte aufruf von urllib2.urlopen() mich immer auf die Seite www.web.de führt und nicht wie es normalerweise sein sollte auf die Seite mit der Werbung. Das ganze ist etwas komplizierter das System auf der Seite führt einen dort mit 2 HTTP Error 302 auf die richtige Seite. Laut Dokumentation folgt urllib2 diesen Weiterleitungen ja einfach. Etwas anderes dürfte ja auch ein Browser nicht machen.

Noch etwas macht mich stutzig. Es gibt nämlich das Programm http://millionenklick.sourceforge.net/ (eine Java implementierung die genau das gleiche macht). Wenn man dort in den Quelltext guckt http://millionenklick.sourceforge.net/xref/index.html stellt man fest das dass Programm im Prinzip genauso funktioniert wie meine Python Implementierung. Der Unterschied ist das es dort einfach funktioniert.

Ich hoffe mal das mir irgendwer hier weiterhelfen kann. Ich habe nämlich keine Ahnung mehr woran das noch liegen könnte.

Hier der Code:

Code: Alles auswählen

#!/bin/python
#-*- coding: utf-8 -*-
import urllib
import urllib2
import re
import time
import os.path
from random import random, seed
from functions import *
import cookielib

url = 'https://millionenklick.web.de/spielen_ohne_js'
headers = { 
'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8.1.8) Gecko/20071022 Ubuntu/7.10 (gutsy) Firefox/2.0.0.8',
'Accept' : ' text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'Accept-Language' : 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding' : 'gzip,deflate',
'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive' : '300',
'Connection' : 'keep-alive',
'Referer' : 'https://millionenklick.web.de/spielen_ohne_js',
}
COOKIEFILE = 'cookies.lwp'
cookies = cookielib.LWPCookieJar()

if os.path.isfile(COOKIEFILE):
  cookies.load(COOKIEFILE)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
urllib2.install_opener(opener)


# Zufällig langes warten
#n = int((random()*10000000)%(18000))
#time.sleep(n)

# --- Schritt 1 ---
response=urllib2.urlopen(urllib2.Request(url,None,headers))
text=unzip(response)
re_url = response.geturl()
data={}
data = extract_postelements(text, 0);
data['username']='ganz'
data['password']='geheim'

form = extract_form(text, 0)
url = extract_action(form)
headers['Referer'] = re_url

n = int((random()*1000)%(20))+5
time.sleep(n)

# --- Schritt 2 ---
response = urllib2.urlopen(urllib2.Request(url, urllib.urlencode(data),headers))
text = unzip(response)
re_url = response.geturl()
headers['Referer'] = re_url
url = re_url + '&zahl=zufallstipp'

n = int((random()*1000)%(20))+5
time.sleep(n)

# --- Schritt 3 ---
response = urllib2.urlopen(urllib2.Request(url,None,headers))
text = unzip(response)
links = extract_links(text)
re_url = response.geturl()
sendlinks = []
for all in links:
  if(re.search('insert_event.ng', all)):
    attr = all.split(' ')
    for liste in attr:
      if(re.search('href.?\=.?"', liste)):
        sendlinks.append(re.sub('href=','',re.sub('"','',re.sub('\s', '', liste))))
#Anzahl Werbelinks zaehlen
count = 0
for all in sendlinks:
  count += 1
#Einen Link auswählen
x = int((random()*100)%(count - 1))
url = sendlinks[x]
headers['Referer'] = re_url

n = int((random()*1000)%(20))+5
time.sleep(n)
print url
# --- Schritt 4 ---
response = urllib2.urlopen(urllib2.Request(url,None,headers))
text = unzip(response)
print 'Here are the cookies received so far:'
for index, cookie in enumerate(cookies):
  print index, ': ', cookie
  cookies.save(COOKIEFILE)

print text
if response:
  print "Tipp erfolgreich abgegeben"
Einige Funktionen sind in einer anderen Datei implementiert. Dort wird allerdings bloß ein bisschen Parsing der HTML Seiten gemacht so dass ich das hier für nicht relevant halte.
rajan
User
Beiträge: 3
Registriert: Sonntag 2. Dezember 2007, 16:16

Ich bin ja erstmal beruhigt das ihr alle genauso ratlos zu sein scheint wie ich es bin ;)
BlackJack

Also mir ist das einfach nur zuviel. Wenn Du ein minimales, lauffähiges Beispiel postest, gibt's vielleicht mehr Rückmeldung.
rajan
User
Beiträge: 3
Registriert: Sonntag 2. Dezember 2007, 16:16

Würde ich wirklich gerne, allerdings tritt der Fehler ja erst im beim letzten Aufruf (Zeile 88) auf. Viel kann ich da nicht wegstreichen da die die vorherigen Schritte notwendig sind um überhaupt an die URL zu kommen.
Antworten