学习scrapy爬虫,请帮忙看下问题出在哪。

US13032530 2015-12-21 12:54:18
最近学着用scrapy做爬虫,感觉真的很麻烦,比如说爬个网页上的段子:
www.qiushibaike.com

代码如下
zou@zou-VirtualBox:~/qsbk$ tree
.
items.py
qsbk
nit__.py
items.py
pipelines.py
settings.py
spiders
_init__.py
qsbk_spider.py
scrapy.cfg

-------------------------
vi items.py

from scrapy.item import Item,Field

class TutorialItem(Item):
# define the fields for your item here like:
# name = Field()
pass

class Qsbk(Item):
title = Field()
link = Field()
desc = Field()

-----------------------
vi qsbk/spiders/qsbk_spider.py

from scrapy.spider import Spider

class QsbkSpider(Spider):
name = "qsbk"
allowed_domains = ["qiushibaike.com"]
start_urls = ["http://www.qiushibaike.com"]

def parse(self, response):
filename = response
open(filename, 'wb').write(response.body)

------------------------

然后我 scrapy shell www.qiushibaike.com 想先把网页取下来,再xpath里面的子节点(即一些内容)
这个想法应该没错吧,但是到scrapy shell www.qiushibaike.com的时候网页内容就无法显示了,
错误反馈:
zou@zou-VirtualBox:~/qsbk$ scrapy shell http://www.qiushibaike.com
/home/zou/qsbk/qsbk/spiders/qsbk_spider.py:1: ScrapyDeprecationWarning: Module `scrapy.spider` is deprecated, use `scrapy.spiders` instead
from scrapy.spider import Spider
2015-12-21 00:18:30 [scrapy] INFO: Scrapy 1.0.3 started (bot: qsbk)
2015-12-21 00:18:30 [scrapy] INFO: Optional features available: ssl, http11
2015-12-21 00:18:30 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'qsbk.spiders', 'SPIDER_MODULES': ['qsbk.spiders'], 'LOGSTATS_INTERVAL': 0, 'BOT_NAME': 'qsbk'}
2015-12-21 00:18:30 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, CoreStats, SpiderState
2015-12-21 00:18:30 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-12-21 00:18:30 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-12-21 00:18:30 [scrapy] INFO: Enabled item pipelines:
2015-12-21 00:18:30 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2015-12-21 00:18:30 [scrapy] INFO: Spider opened
2015-12-21 00:18:30 [scrapy] DEBUG: Retrying <GET http://www.qiushibaike.com> (failed 1 times): [<twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionDone'>>]
2015-12-21 00:18:30 [scrapy] DEBUG: Retrying <GET http://www.qiushibaike.com> (failed 2 times): [<twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionDone'>>]
2015-12-21 00:18:30 [scrapy] DEBUG: Gave up retrying <GET http://www.qiushibaike.com> (failed 3 times): [<twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionDone'>>]
Traceback (most recent call last):
File "/usr/local/bin/scrapy", line 11, in <module>
sys.exit(execute())
File "/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py", line 143, in execute
_run_print_help(parser, _run_command, cmd, args, opts)
File "/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py", line 89, in _run_print_help
func(*a, **kw)
File "/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py", line 150, in _run_command
cmd.run(args, opts)
File "/usr/local/lib/python2.7/dist-packages/scrapy/commands/shell.py", line 63, in run
shell.start(url=url)
File "/usr/local/lib/python2.7/dist-packages/scrapy/shell.py", line 44, in start
self.fetch(url, spider)
File "/usr/local/lib/python2.7/dist-packages/scrapy/shell.py", line 87, in fetch
reactor, self._schedule, request, spider)
File "/usr/lib/python2.7/dist-packages/twisted/internet/threads.py", line 122, in blockingCallFromThread
result.raiseException()
File "<string>", line 2, in raiseException
twisted.web._newclient.ResponseNeverReceived: [<twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionDone'>>]


这个应该修改哪里?

题外话,刚学scrapy2天,感觉不怎么方便用这个东西,应该是我学的还不够吧,各位公司里做爬虫的话用什么,很看重scrapy吗?聊聊吧!
...全文
3929 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
c_java_123 2016-05-11
  • 打赏
  • 举报
回复
引用 7 楼 sinat_20625509 的回复:
ScrapyDeprecationWarning: Module `scrapy.spider` is deprecated, use `scrapy.spiders` instead from scrapy.spider import Spider 就是这个问题解决了吗?
用scrapy.spiders
sinat_20625509 2016-03-27
  • 打赏
  • 举报
回复
ScrapyDeprecationWarning: Module `scrapy.spider` is deprecated, use `scrapy.spiders` instead from scrapy.spider import Spider 就是这个问题解决了吗?
soft_south 2016-02-17
  • 打赏
  • 举报
回复
引用 5 楼 nice_fish 的回复:
[quote=引用 4 楼 henan_csdn 的回复:] 现在的网站对爬虫还是比较反感的,所以我们在爬取的时候一定要想方设法让我们的爬虫像人一样去浏览,楼主的问题我也遇到过,我的总结如下: 1、User-agent头是网站判断爬虫的第一道大门,我在网上搜索了100多个agent头串,保存成txt文件,程序运行时读取到一个数组中,每次打开链接时都随机从数组中挑选一个。 2、爬虫爬取的时间一定要控制好,大量的爬虫快速爬取服务器对服务器性能会产生较大的压力,所以在爬取的时候,写一个随机事件方法,一般而言我都设置1-2秒左右的随机暂停时间,这样也是为了模拟人的访问间隔 3、楼主可以试一下用BeautifulSoup+urllib2来编写爬虫,个人认为更加适合糗百这种信息结构较为简单的网站,对于爬虫的理解也会更加深刻一点。 以上是我学习的一些小总结,楼主可以借鉴一下,有不足的地方也请各路大神指教哈~
现在网上的例子都是拿urilib2来写的,其实reqeusts更好用,自带json 的解析,编码自动解决,相比方便很多。[/quote] 是的,我也是最近才知道有这么一个库,打算抽时间好好学习一下哈
  • 打赏
  • 举报
回复
引用 4 楼 henan_csdn 的回复:
现在的网站对爬虫还是比较反感的,所以我们在爬取的时候一定要想方设法让我们的爬虫像人一样去浏览,楼主的问题我也遇到过,我的总结如下: 1、User-agent头是网站判断爬虫的第一道大门,我在网上搜索了100多个agent头串,保存成txt文件,程序运行时读取到一个数组中,每次打开链接时都随机从数组中挑选一个。 2、爬虫爬取的时间一定要控制好,大量的爬虫快速爬取服务器对服务器性能会产生较大的压力,所以在爬取的时候,写一个随机事件方法,一般而言我都设置1-2秒左右的随机暂停时间,这样也是为了模拟人的访问间隔 3、楼主可以试一下用BeautifulSoup+urllib2来编写爬虫,个人认为更加适合糗百这种信息结构较为简单的网站,对于爬虫的理解也会更加深刻一点。 以上是我学习的一些小总结,楼主可以借鉴一下,有不足的地方也请各路大神指教哈~
现在网上的例子都是拿urilib2来写的,其实reqeusts更好用,自带json 的解析,编码自动解决,相比方便很多。
soft_south 2016-02-14
  • 打赏
  • 举报
回复
现在的网站对爬虫还是比较反感的,所以我们在爬取的时候一定要想方设法让我们的爬虫像人一样去浏览,楼主的问题我也遇到过,我的总结如下: 1、User-agent头是网站判断爬虫的第一道大门,我在网上搜索了100多个agent头串,保存成txt文件,程序运行时读取到一个数组中,每次打开链接时都随机从数组中挑选一个。 2、爬虫爬取的时间一定要控制好,大量的爬虫快速爬取服务器对服务器性能会产生较大的压力,所以在爬取的时候,写一个随机事件方法,一般而言我都设置1-2秒左右的随机暂停时间,这样也是为了模拟人的访问间隔 3、楼主可以试一下用BeautifulSoup+urllib2来编写爬虫,个人认为更加适合糗百这种信息结构较为简单的网站,对于爬虫的理解也会更加深刻一点。 以上是我学习的一些小总结,楼主可以借鉴一下,有不足的地方也请各路大神指教哈~
  • 打赏
  • 举报
回复
因为你没有合理的Headers ,所以直接被ban掉了。
panghuhu250 2015-12-29
  • 打赏
  • 举报
回复
scrapy的user agent暴露了它是一个爬虫, 被屏蔽了. shell命令可以加上参数"USER_AGENT = "Mozilla..." (自己换成合适的agent字符串). 真正扒的时候要把这个设定放到setting.py中,具体自己看文档.
iii9527 2015-12-28
  • 打赏
  • 举报
回复
很看重赶紧学 能用到地方很多 而且也缺人
首先一定要知道 Scrapy爬虫框架 对新手非常的不友好,或者从某些视频网站上跟着视频学或者说从培训机构里学几天技能掌握的,主要原因有以下两个方面。框架模块内容太多,虽然只是实现了一个简单的爬虫工作,但是实际上完成一个页面的抓取在框架里最少要走8个以上的步骤,但是这些步骤都是基本都是依靠配置文件完成的,没有丰富的爬虫经验,这些模块很多都不知道是做什么的,也不知道怎么配置。基于框架内进行数据抓取仅限于那些通用的网站抓取,你就简单理解为一个完成重复工作的机器人就行了。但是如果是那种反爬比较厉害的网站那就是另外一种情况了,完全是爬虫工程师和网站开发者的一个博弈了,所以这种情况不适合任何一种爬虫框架。对于那些想在工作中摸鱼的Python工程师来说就一定要使用爬虫框架,你会发现省不少力气而且效率真心非常高,不过一切都是在对框架熟练掌握的基础上、和对业务的深刻理解来说来说。但凡说 Scrapy 无用的基本上没有认真阅读过 Scrapy 的源码,对于 Scrapy框架 中的众多功能在搭建爬虫系统的时候能想到用几个?而且是基本是没有做过大型的爬虫系统项目的。咱们倒着推这个事,你就知道为什么要用Scrapy框架了。我之前的单位是国家互联网的新闻中心,做的项目中的有一项是复现863课题舆情监控系统中的内容,使用的方法是 Scrapy爬虫框架 结合 Django Web 搭建的数据采集系统,抓取的目标对象包括新闻、博客、论坛等等,其中每天目标检测网站成千上万,如果不用框架去做这种数据采集得累死。1.抓取的数据存哪里?单纯Scrapy爬虫脚本写好了执行抓取任务时数据保存到哪里?ES、Mongodb、MySQL?如果做过开发的人都知道存 Mongodb 中,那些说把数据存到 MySQL 的人基本上99%是从培训机构里来的,因为大多数培训机构爬虫是不讲 Mongodb 的。通过业务计算逻辑把数据传输到生产 ES 环境中。2.几千、几万个爬虫脚本应该怎么管理?很多刚入行的人都觉得爬虫脚本难写,其实并不是这样。最难的是如何管理密密麻麻数不清的爬虫脚本,这里介绍Python如何处理这个事情。管理方式无非集中,Web管理环境、GUI管理环境、手动管理环境,不管是哪一种都需要一定的开发基础和管理思路。比较省事的用别人写好的Scrapy管理框架,比如Gerapy爬虫管理框架。如同这样web直接一键管理爬虫脚本,更多内容看上面的文章,这里就不重复了。3.Scrapy如何面对反爬的?跟大多数单线抓取某个网站解决其反爬一样,只要把反爬的逻辑设置好,比如最简单的更换代理IP,更换header,解析JS生成cookie访问等等,都可以在框架中设置配置文件。4.如何提高代码编写效率以及数据爬取效率?一定要阅读源码,一定要阅读源码,一定要阅读源码你才能知道这个框架里到底有什么内容可以用。5.基于Python各种框架开发的爬虫定制化项目。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧