构建新的请求实现翻页
关于spider源码
每一个request返回一个response,parse是response默认的回调函数,每一个response都有parse函数,但parse中返回的所有item都使用同一个管道对象
正式开始:
两种方法:1.拼接url,2.找到翻页连接
1.拼接url
baseurl 基础url
offset 偏移量
baseurl和offset拼接实现
表示所有符合一个或后一个的元素,如果是同一个父元素下的两个子元素用or
parse函数中for循环结束后表示当前这一页的所有连接已经全部处理完,
令offset偏移,再拼接
1 yield scrapy.Request(url,callback = self.parse)
关键:产生新的request请求,返回的response对象仍然调用parse
yield和for中yield作用:
将对象传递给引擎,引擎判断是item,则交给管道处理,是request请求,则交给调度器,进入队列产生response
事实上,爬虫文件只能产生这两个对象。
对yield 的理解:
类似于return,但不会打断下面代码的执行,而是返回后继续执行当前代码,这里调用spider的就是引擎,所以返回给引擎了
(ps:yield 下次调用时会在这个位置继续执行?
eg.:for循环中对第一个node,yield item之后进管道,下一次进入这个函数时从这里继续执行?
最后一个 yield scrapy.Request(url,callback = self.parse) 这里response回调时怎么做?)
3个小时,因为编码,想死
1 self.f = open("myscrapy.json","w",encoding='utf-8')
写你吗比博客,就这吧