我是Scrapy的初学者。我试图登录一个网站,让我能够做刮刮。但我被困住了。下面是我蜘蛛的代码
蜘蛛:
import scrapy
from scrapy.http import FormRequest
from scrapy.selector import HtmlXPathSelector
from scrapy.log import log
class DmozSpider(scrapy.Spider):
name = "login"
allowed_domains = ["example.com"]
start_urls = [
"http://example.com/login"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
form = hxs.select("//form[@id = 'login']/text()").extract()
return scrapy.FormRequest.from_response(
#loginid = "name" attribute of the username field
response,
formdata={'loginid': 'username', 'password': 'password'},
callback=self.after_login
)
def after_login(self, response):
if "authentication failed" in response.body:
return
else:
print "I am in"日志:
[tutorial]$ scrapy crawl login
/home/tutorial/tutorial/spiders/login.py:5: ScrapyDeprecationWarning: tutorial.spiders.login.LoginSpider inherits from deprecated class scrapy.spider.BaseSpider, please inherit from scrapy.spider.Spider. (warning only on first subclass, there may be others)
class LoginSpider(BaseSpider):
2015-05-07 06:05:02-0700 [scrapy] INFO: Scrapy 0.24.4 started (bot: tutorial)
2015-05-07 06:05:02-0700 [scrapy] INFO: Optional features available: ssl, http11
2015-05-07 06:05:02-0700 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'tutorial.spiders', 'SPIDER_MODULES': ['tutorial.spiders'], 'BOT_NAME': 'tutorial'}
2015-05-07 06:05:02-0700 [scrapy] INFO: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2015-05-07 06:05:02-0700 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-05-07 06:05:02-0700 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-05-07 06:05:02-0700 [scrapy] INFO: Enabled item pipelines:
2015-05-07 06:05:02-0700 [login] INFO: Spider opened
2015-05-07 06:05:02-0700 [login] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2015-05-07 06:05:02-0700 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2015-05-07 06:05:02-0700 [scrapy] DEBUG: Web service listening on 127.0.0.1:6080
2015-05-07 06:05:03-0700 [login] DEBUG: Crawled (401) <GET http://example.com/login> (referer: None)
2015-05-07 06:05:03-0700 [login] DEBUG: Ignoring response <401 http://example.com/login>: HTTP status code is not handled or not allowed
2015-05-07 06:05:03-0700 [login] INFO: Closing spider (finished)
2015-05-07 06:05:03-0700 [login] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 238,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 33245,
'downloader/response_count': 1,
'downloader/response_status_count/401': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 5, 7, 13, 5, 3, 309509),
'log_count/DEBUG': 4,
'log_count/INFO': 7,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2015, 5, 7, 13, 5, 2, 518131)}
2015-05-07 06:05:03-0700 [login] INFO: Spider closed (finished)我在日志中得到了以下内容:
**2015-05-07 06:05:03-0700 [login] DEBUG: Crawled (401) <GET http://example.com/login> (referer: None)
2015-05-07 06:05:03-0700 [login] DEBUG: Ignoring response <401 http://example.com/login>: HTTP status code is not handled or not allowed**我不知道如何解决此错误并成功地进行身份验证。任何帮助都是非常感谢的。谢谢。
编辑:我的代码中提到的 example.com是一个示例URL,我要验证的页面有以下登录表单:
<div class="Login">
<h4>Log in here</h4>
<form id="login" action="/login.action" method="post">
<ul>
<li><label for="user_id">User Id :</label></li>
<li><input type="text" name="loginid" maxlength="30" value="" class="login"></li>
<li><label for="user_id">Password :</label></li>
<li><input type="password" name="password" maxlength="30" class="login"></li>
<li><input type="submit" value="Log in" class="btnSubmit"></li>
</ul>
</div>发布于 2015-05-08 08:07:07
好吧,抱歉-我错了。我试图验证的URL有一个javascript pop,它在实际提供401并在网页中显示登录表单之前询问登录信息。所以我的蜘蛛不行了。但话虽如此,有没有办法可以在Scrapy中处理这个javascript登录表单呢?
发布于 2015-05-07 15:15:59
您正在尝试在页面http://example.com/login上验证以下内容:
尝试使用实际具有身份验证表单的真实网页。
https://stackoverflow.com/questions/30102199
复制相似问题