Scrapy Item学习笔记
scrapy框架下的Item用于定义抓取的数据内容。实现从非结构化数据(网页)中提取结构化数据时,结构化数据所用的数据结构即为该item(Scrapy.Item)
执行方式
声明一个item类,scrapy导入该模块并使用item实例来存储结构化数据。
所有数据的类型Field实际是一个dict的别名而已。
开发者创建item类只需关注一点:1.需要从网站中抓取哪些数据(采用变量名标志)。
例子(dmoz网站资源数据和news新闻数据)
1.文件:items.py
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class DmozItem(scrapy.Item):
"""
define the fields for your item here like.
for crawl dmoz items
"""
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
class NewsItem(scrapy.Item):
"""
define the fields for news
for crawl news items
"""
url = scrapy.Field()
source = scrapy.Field()
title = scrapy.Field()
editor = scrapy.Field()
time = scrapy.Field()
content = scrapy.Field()
2.抓取spider模块导入item类并使用
from NewsSpiderMan.items import NewsItem
使用到的代码片段:
class NewsSpider(CrawlSpider):
def parse_news(response):
item = NewsItem()
item['url'] = [response.url]
item['source'] =\
response.xpath('//a[@id="ne_article_source"]/text()').\
extract()
item['title'] =\
response.xpath('//div[@class="post_content_main"]/h1/text()').\
extract()
item['editor'] =\
response.xpath('//span[@class="ep-editor"]/text()').\
extract()
item['time'] =\
response.xpath('//div[@class="post_time_source"]/text()').\
extract()
item['content'] =\
response.xpath('//div[@class="post_text"]/p/text()').\
extract()
for key in item:
for data in item[key]:
log.msg("item %s value %s" % (key, data))
return item
Item Loaders类
拥用更加灵活、高效的API来让spider模块对item进行数据填充,更好的对网站数据的解析并填入item项。