Ich verwende die folgende Spinne zum Crawlen der tinyz.us Website, die eine Authentifizierung erfordert.Scrapy, Login mit Captcha fehlgeschlagen
from scrapy.spiders import BaseSpider
from scrapy.http import FormRequest
import urllib2
class Start(BaseSpider):
name = 'test'
start_urls = ["http://tinyz.us"]
def parse(self, response):
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent': user_agent}
imgRequest = urllib2.Request("http://tinyz.us/securimage/securimage_show.php", headers=headers)
imgData = urllib2.urlopen(imgRequest).read()
with open('captcha.png', 'wb') as f:
f.write(imgData)
captcha = raw_input("-----> Enter the captcha in manually :")
return FormRequest.from_response(
response=response,
formdata={"login_user": "myusername",
"login_password": "mypass",
"captcha_code": captcha},
formxpath="//*[@id='login-form']",
callback=self.after_login,
headers=headers)
def after_login(self, response):
print("AFTER LOGIN")
with open('response.html', 'w') as f:
f.write(response.body)
Die Website verwendet eine konstante URL für das Captcha zu erzeugen und es scheint, dass jedes Mal, wenn ein neues erzeugt. Ich bin nicht mit der jeweiligen Technologie vertraut, aber die Art und Weise, wie ich dieses Problem umgehen kann, besteht darin, das Captcha zu speichern und manuell zu übergeben.
Das Problem ist, dass es immer eine fehlgeschlagene Antwort zurückgibt, ich bin mir nicht sicher, ob das Problem wegen der Art und Weise ist, dass Scrapy die Daten an form
oder wegen des Captcha übergibt und ich keine Möglichkeit zum Debuggen finden kann die Spinne richtig.
Wie soll ich beinhalten die 'captcha' nach der Eingabe von Zeichen manuell. Sie verwenden es nicht in der 'Parse'-Funktion. Also, was ist das Request innerhalb des 'Parse'? – Kasramvd
Entschuldigung, ich habe vergessen, den unnötigen Teil von 'parse' zu entfernen, überprüfen Sie bitte die aktualisierte Antwort – eLRuLL
Es löst' Datei '/usr/lib/python2.7/dist-packages/twisted/internet/defer.py ", Zeile 588, in _runCallbacks current.result = Rückruf (current.result, * args, ** kw) Datei "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", Zeile 76, in parse raise NotImplementedError' – Kasramvd