其实很简单,就是想要存储的位置发生改变。直接看例子,然后触类旁通。

以大众点评 评论的内容为例 ,位置:http://www.dianping.com/shop/77489519/review_more?pageno=1

数据存储形式由A 变成B

A:

展开的话这样子:

B:

本质上看,就是多个相同类型的item可以合并,不需要那么多,分别来看下各自的代码:

A:

class GengduopinglunSpider(scrapy.Spider):
name = 'gengduopinglun'
start_urls = ['http://www.dianping.com/shop/77489519/review_more?pageno=1'] def parse(self, response):
item=PinglunItem()
comment = item['comment'] if "comment" in item else []
for i in response.xpath('//div[@class="content"]'):
for j in i.xpath('.//div[@class="J_brief-cont"]/text()').extract():
comment.append(j.strip())
item['comment']=comment
next_page = response.xpath(
'//div[@class="Pages"]/div[@class="Pages"]/a[@class="NextPage"]/@href').extract_first()
item['_id']=next_page
# item['_id']='onlyone'
if next_page != None:
next_page = response.urljoin(next_page)
# yield Request(next_page, callback=self.shop_comment,meta={'item': item})
yield Request(next_page, callback=self.parse,)
yield item

B:

class GengduopinglunSpider(scrapy.Spider):
name = 'gengduopinglun'
start_urls = ['http://www.dianping.com/shop/77489519/review_more?pageno=1'] def parse(self, response):
item=PinglunItem()
comment = item['comment'] if "comment" in item else []
for i in response.xpath('//div[@class="content"]'):
for j in i.xpath('.//div[@class="J_brief-cont"]/text()').extract():
comment.append(j.strip())
item['comment']=comment
next_page = response.xpath(
'//div[@class="Pages"]/div[@class="Pages"]/a[@class="NextPage"]/@href').extract_first()
# item['_id']=next_page
item['_id']='onlyone'
if next_page != None:
next_page = response.urljoin(next_page)
yield Request(next_page, callback=self.shop_comment,meta={'item': item})
# yield Request(next_page, callback=self.parse,)
# yield item def shop_comment(self, response):
item = response.meta['item']
comment = item['comment'] if "comment" in item else []
for i in response.xpath('//div[@class="content"]'):
for j in i.xpath('.//div[@class="J_brief-cont"]/text()').extract():
comment.append(j.strip())
item['comment']=comment
next_page = response.xpath(
'//div[@class="Pages"]/div[@class="Pages"]/a[@class="NextPage"]/@href').extract_first()
if next_page != None:
next_page = response.urljoin(next_page)
yield Request(next_page, callback=self.shop_comment,meta={'item': item})
yield item

B里面是有重复代码的,这个无关紧要,只是演示,注意看两个yield 的区别

以上只是演示scrapy中yield的用法,用来控制item,其余pipline,setting未展示.

scrapy中对于item的把控的更多相关文章

  1. Scrapy中的item是什么

    这两天看Scrapy,看到item这个东西,觉得有点抽象,查了一下,有点明白了. Item 是保存爬取到的数据的容器:其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定 ...

  2. 关于ListView中item与子控件抢夺焦点的解决方法

    1.在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button ...

  3. 手把手教你进行Scrapy中item类的实例化操作

    接下来我们将在爬虫主体文件中对Item的值进行填充. 1.首先在爬虫主体文件中将Item模块导入进来,如下图所示. 2.第一步的意思是说将items.py中的ArticleItem类导入到爬虫主体文件 ...

  4. 第十七节:Scrapy爬虫框架之item.py文件以及spider中使用item

    Scrapy原理图: item位于原理图的最左边 item.py文件是报存爬取数据的容器,他使用的方法和字典很相似,但是相比字典item多了额外的保护机制,可以避免拼写错误或者定义错误. 1.创建it ...

  5. Scrapy中使用cookie免于验证登录和模拟登录

    Scrapy中使用cookie免于验证登录和模拟登录 引言 python爬虫我认为最困难的问题一个是ip代理,另外一个就是模拟登录了,更操蛋的就是模拟登录了之后还有验证码,真的是不让人省心,不过既然有 ...

  6. scrapy中的request

    scrapy中的request 初始化参数 class scrapy.http.Request( url [ , callback, method='GET', headers, body, cook ...

  7. [转]scrapy中的request.meta

    作者:知乎用户链接:https://www.zhihu.com/question/54773510/answer/146971644 meta属性是字典,字典格式即{'key':'value'},字典 ...

  8. 论Scrapy中的数据持久化

    引入 Scrapy的数据持久化,主要包括存储到数据库.文件以及内置数据存储. 那我们今天就来讲讲如何把Scrapy中的数据存储到数据库和文件当中. 终端指令存储 保证爬虫文件的parse方法中有可迭代 ...

  9. 使用scrapy中xpath选择器的一个坑点

    情景如下: 一个网页下有一个ul,这个ur下有125个li标签,每个li标签下有我们想要的 url 字段(每个 url 是唯一的)和 price 字段,我们现在要访问每个li下的url并在生成的请求中 ...

随机推荐

  1. GoWeb_01:GoWeb基础之mac上mysql安装

    Mac下的MySql安装与配置 1. 访问MySQL的官网 http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL Community Server”下方有一个 ...

  2. 如何在Mongodb中实现数据超时自动删除功能?

    在工作过程中,我们难免会遇到这样的问题,我们想保存一些数据,但是我们对这些数据的要求并不高,有时候往往只是想要某个时间范围内的数据,比如我们如果永远只关心从当前时间往前推半年内的数据特性,那么我们就不 ...

  3. ASP.NET IOC之 AutoFac的认识和结合MVC的使用

    这几天研究了解发现AutoFac是个牛X的IOC容器,是.NET领域比较流行的IOC框架之一,传说是速度最快的,~ 据相关资料,相关学习,和认知,遂做了一些整理 优点: 它是C#语言联系很紧密,也就是 ...

  4. RabbitMQ消息队列里积压很多消息

    1.场景:上千万条消息在mq里积压了几个小时了还没解决 2.解决: 1)先修复consumer的问题,确保其恢复消费速度,然后将现有cnosumer都停掉 2)新建一个topic,partition是 ...

  5. codevs 1500 后缀排序

    codevs 1500 后缀排序 http://codevs.cn/problem/1500/  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 天凯是MI ...

  6. 2015/11/5用Python写游戏,pygame入门(5):面向对象的游戏设计

    昨天的内容里有了运动的子弹,虽然我们只添加了一个子弹,但你可以看到我们需要记录子弹的x,y坐标,每次要更新它的坐标.如果我们想要有多颗子弹,就需要存储多个坐标.那时候处理起来就不显得那么简单,也许我们 ...

  7. phpcms 仿站小结

    1.title<title>{if isset($SEO['title']) && !empty($SEO['title'])}{$SEO['title']}{/if}{$ ...

  8. 全网最全JS正则表达式 校验数字

    Js代码 <script type="text/javascript"> function SubmitCk() { var reg = /^([a-zA-Z0-9]+ ...

  9. jmeter,测登录,要不要过滤掉JS,CSS等请求?感觉过滤掉了压出来的数据就不真实?

    首先,我们来明确下你的性能测试目的,你的目的是服务端的性能还是前端的性能.这两用目的所涉及到的测试场景和工具等方法是不一样的.1.我们先来谈谈服务端的性能.一般的web产品,像css, jpeg等这种 ...

  10. Interger不可变原理

    1.先看代码: package main.java.db.mq; public class TestSwap { public static void main(String[] args) { In ...