Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
looyolo
scrapy
提交
a9957271
S
scrapy
项目概览
looyolo
/
scrapy
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
scrapy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a9957271
编写于
7月 17, 2014
作者:
J
Julia Medina
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Connect spider_closed signal after a crawler is bound to a Spider
上级
eb0253e5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
0 deletion
+24
-0
scrapy/spider.py
scrapy/spider.py
+8
-0
tests/test_spider.py
tests/test_spider.py
+16
-0
未找到文件。
scrapy/spider.py
浏览文件 @
a9957271
...
...
@@ -6,6 +6,7 @@ See documentation in docs/topics/spiders.rst
import
warnings
from
scrapy
import
log
from
scrapy
import
signals
from
scrapy.http
import
Request
from
scrapy.utils.trackref
import
object_ref
from
scrapy.utils.url
import
url_is_from_spider
...
...
@@ -53,6 +54,7 @@ class Spider(object_ref):
def
_set_crawler
(
self
,
crawler
):
self
.
crawler
=
crawler
self
.
settings
=
crawler
.
settings
crawler
.
signals
.
connect
(
self
.
close
,
signals
.
spider_closed
)
def
start_requests
(
self
):
for
url
in
self
.
start_urls
:
...
...
@@ -68,6 +70,12 @@ class Spider(object_ref):
def
handles_request
(
cls
,
request
):
return
url_is_from_spider
(
request
.
url
,
cls
)
@
staticmethod
def
close
(
spider
,
reason
):
closed
=
getattr
(
spider
,
'closed'
,
None
)
if
callable
(
closed
):
return
closed
(
reason
)
def
__str__
(
self
):
return
"<%s %r at 0x%0x>"
%
(
type
(
self
).
__name__
,
self
.
name
,
id
(
self
))
...
...
tests/test_spider.py
浏览文件 @
a9957271
...
...
@@ -8,6 +8,7 @@ try:
except
ImportError
:
import
mock
from
scrapy
import
signals
from
scrapy.spider
import
Spider
,
BaseSpider
from
scrapy.http
import
Request
,
Response
,
TextResponse
,
XmlResponse
,
HtmlResponse
from
scrapy.contrib.spiders.init
import
InitSpider
...
...
@@ -76,6 +77,21 @@ class SpiderTest(unittest.TestCase):
foo
=
'bar'
)
mock_init
.
assert_called_once_with
(
'example.com'
,
foo
=
'bar'
)
def
test_closed_signal_call
(
self
):
class
TestSpider
(
self
.
spider_class
):
closed_called
=
False
def
closed
(
self
,
reason
):
self
.
closed_called
=
True
crawler
=
get_crawler
()
spider
=
TestSpider
.
from_crawler
(
crawler
,
'example.com'
)
crawler
.
signals
.
send_catch_log
(
signal
=
signals
.
spider_opened
,
spider
=
spider
)
crawler
.
signals
.
send_catch_log
(
signal
=
signals
.
spider_closed
,
spider
=
spider
,
reason
=
None
)
self
.
assertTrue
(
spider
.
closed_called
)
class
InitSpiderTest
(
SpiderTest
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录