python – Scrapy 404错误:未处理或不允许HTTP状态代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Scrapy 404错误:未处理或不允许HTTP状态代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3607字,纯文字阅读大概需要6分钟。
内容图文
![python – Scrapy 404错误:未处理或不允许HTTP状态代码](/upload/InfoBanner/zyjiaocheng/704/6aa451e2d2a84a999c3cfd87f3ea9531.jpg)
我正在尝试使用scrapy刮取网站coursetalk,我正在尝试使用蜘蛛模板并获得404错误:
2017-12-29 23:34:30 [scrapy] DEBUG: Ignoring response <404 https://www.coursetalk.com/subjects/data-science/courses/>: HTTP status code is not handled or not allowed
这是我正在使用的代码:
import scrapy
class ListaDeCursosSpider(scrapy.Spider):
name = "lista_de_cursos"
start_urls = ['https://www.coursetalk.com/subjects/data-science/courses/']
def parse(self, response):
print response.body
来自scrapy的竞争日志:
2017-12-29 23:34:26 [scrapy] INFO: Scrapy 1.0.3 started (bot: coursetalk)
2017-12-29 23:34:26 [scrapy] INFO: Optional features available: ssl, http11, boto
2017-12-29 23:34:26 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'coursetalk.spiders', 'SPIDER_MODULES': ['coursetalk.spiders'], 'BOT_NAME': 'coursetalk'}
2017-12-29 23:34:27 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
2017-12-29 23:34:27 [boto] DEBUG: Retrieving credentials from metadata server.
2017-12-29 23:34:28 [boto] ERROR: Caught exception reading instance data
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/boto/utils.py", line 210, in retry_url
r = opener.open(req, timeout=timeout)
File "/usr/lib/python2.7/urllib2.py", line 404, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 422, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1214, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1184, in do_open
raise URLError(err)
URLError: <urlopen error timed out>
2017-12-29 23:34:28 [boto] ERROR: Unable to read instance data, giving up
2017-12-29 23:34:28 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2017-12-29 23:34:28 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2017-12-29 23:34:28 [scrapy] INFO: Enabled item pipelines:
2017-12-29 23:34:28 [scrapy] INFO: Spider opened
2017-12-29 23:34:28 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-12-29 23:34:28 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-12-29 23:34:30 [scrapy] DEBUG: Crawled (404) <GET https://www.coursetalk.com/subjects/data-science/courses/> (referer: None)
2017-12-29 23:34:30 [scrapy] DEBUG: Ignoring response <404 https://www.coursetalk.com/subjects/data-science/courses/>: HTTP status code is not handled or not allowed
2017-12-29 23:34:30 [scrapy] INFO: Closing spider (finished)
解决方法:
看起来这个网站是如此奇怪,响应状态代码是404但仍然可以正常获取正文.
并且在Scrapy HttpErrorMiddleware中默认启用,这将过滤掉不成功的Http响应,以便蜘蛛不必处理它们.在这种情况下,scrapy提供HTTPERROR_ALLOWED_CODES设置以允许即使返回错误代码也能处理响应.
在项目setting.py中添加HTTPERROR_ALLOWED_CODES = [404]可以绕过此问题
import scrapy
import logging
class ListaDeCursosSpider(scrapy.Spider):
name = "lista_de_cursos"
allowed_domains = ['www.coursetalk.com']
start_urls = ['https://www.coursetalk.com/subjects/data-science/courses/']
def parse(self, response):
logging.info("response.status:%s"%response.status)
logourl = response.selector.css('div.main-nav__logo img').xpath('@src').extract()
logging.info('response.logourl:%s'%logourl)
内容总结
以上是互联网集市为您收集整理的python – Scrapy 404错误:未处理或不允许HTTP状态代码全部内容,希望文章能够帮你解决python – Scrapy 404错误:未处理或不允许HTTP状态代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。