资讯专栏INFORMATION COLUMN

scrapy学习笔记(三):使用item与pipeline保存数据

13651657101 / 2901人阅读

摘要:最近真是忙的吐血。。。上篇写的是直接在爬虫中使用,这样不是很好,下使用才是正经方法。

最近真是忙的吐血。。。

上篇写的是直接在爬虫中使用mongodb,这样不是很好,scrapy下使用item才是正经方法。
在item中定义需要保存的内容,然后在pipeline处理item,爬虫流程就成了这样:

抓取 --> 按item规则收集需要数据 -->使用pipeline处理(存储等)

定义item,在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 GetquotesItem(scrapy.Item):
    # define the fields for your item here like:
    # 定义我们需要抓取的内容:
    # 1.名言内容
    # 2.作者
    # 3.标签
    content = scrapy.Field()
    author = scrapy.Field()
    tags = scrapy.Field()

我们将数据库的配置信息保存在setting.py文件中,方便调用

MONGODB_HOST = "localhost"
MONGODB_PORT = 27017
MONGODB_DBNAME = "store_quotes2"
MONGODB_TABLE = "quotes2"

另外,在setting.py文件中一点要将pipeline注释去掉,要不然pipeline不会起作用:

#ITEM_PIPELINES = {
#    "getquotes.pipelines.SomePipeline": 300,
#}

改成

ITEM_PIPELINES = {
    "getquotes.pipelines.GetquotesPipeline": 300,
}

现在在pipeline.py中定义处理item方法:

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

# 将setting导入,以使用定义内容
from scrapy.conf import settings
import pymongo

class GetquotesPipeline(object):

    # 连接数据库
    def __init__(self):
        
        # 获取数据库连接信息
        host = settings["MONGODB_HOST"]
        port = settings["MONGODB_PORT"]
        dbname = settings["MONGODB_DBNAME"]
        client = pymongo.MongoClient(host=host, port=port)
        
        # 定义数据库
        db = client[dbname]
        self.table = db[settings["MONGODB_TABLE"]]
    
    # 处理item
    def process_item(self, item, spider):
            # 使用dict转换item,然后插入数据库
            quote_info = dict(item)
            self.table.insert(quote_info)
            return item

相应的,myspider.py中的代码变化一下

import scrapy
import pymongo

# 别忘了导入定义的item
from getquotes.items import GetquotesItem

class myspider(scrapy.Spider):

    # 设置爬虫名称
    name = "get_quotes"

    # 设置起始网址
    start_urls = ["http://quotes.toscrape.com"]

    """
        # 配置client,默认地址localhost,端口27017
        client = pymongo.MongoClient("localhost",27017)
        # 创建一个数据库,名称store_quote
        db_name = client["store_quotes"]
        # 创建一个表
        quotes_list = db_name["quotes"]
    """
    def parse(self, response):

        #使用 css 选择要素进行抓取,如果喜欢用BeautifulSoup之类的也可以
        #先定位一整块的quote,在这个网页块下进行作者、名言,标签的抓取
        for quote in response.css(".quote"):
            """
            # 将页面抓取的数据存入mongodb,使用insert
            yield self.quotes_list.insert({
                "author" : quote.css("small.author::text").extract_first(),
                "tags" : quote.css("div.tags a.tag::text").extract(),
                "content" : quote.css("span.text::text").extract_first()
            })
            """
            item = GetquotesItem()
            item["author"] = quote.css("small.author::text").extract_first()
            item["content"] = quote.css("span.text::text").extract_first()
            item["tags"] = quote.css("div.tags a.tag::text").extract()
            yield item


        # 使用xpath获取next按钮的href属性值
        next_href = response.xpath("//li[@class="next"]/a/@href").extract_first()
        # 判断next_page的值是否存在
        if next_href is not None:

            # 如果下一页属性值存在,则通过urljoin函数组合下一页的url:
            # www.quotes.toscrape.com/page/2
            next_page = response.urljoin(next_href)

            #回调parse处理下一页的url
            yield scrapy.Request(next_page,callback=self.parse)

可以再scrapy输出信息中看到pipeline启用

再来看看数据库保存情况

完美保存

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38619.html

相关文章

  • scrapy学习笔记

    摘要:是最有名的爬虫框架之一,可以很方便的进行抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一些常见问题一安装在安装之前有一些依赖需要安装,否则可能会安装失败,的选择器依赖于,还有网络引擎,下面是下安装的过程下安装安装 scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一...

    luzhuqun 评论0 收藏0
  • Python Scrapy爬虫框架学习

    摘要:组件引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。下载器下载器负责获取页面数据并提供给引擎,而后提供给。下载器中间件下载器中间件是在引擎及下载器之间的特定钩子,处理传递给引擎的。 Scrapy 是用Python实现一个为爬取网站数据、提取结构性数据而编写的应用框架。 一、Scrapy框架简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 ...

    harriszh 评论0 收藏0
  • Scrapy 框架入门简介

    摘要:解析的方法,每个初始完成下载后将被调用,调用的时候传入从每一个传回的对象来作为唯一参数,主要作用如下负责解析返回的网页数据,提取结构化数据生成生成需要下一页的请求。 Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常...

    Coding01 评论0 收藏0
  • python使用Scrapy框架抓取起点中文网免费小说案例

    摘要:使用工具一使用创建项目过程略二安装框架三创建项目创建爬虫项目创建爬虫,先进入爬虫项目目录创建完成后项目目录如下目录下的的就是我们的爬虫文件四打开编写爬虫的代码进入需要爬去的书的目录,找到开始设置鬼吹灯图书目录在创建项目的时候,筛选的地址为打 使用工具,ubuntu,python,pycharm一、使用pycharm创建项目:过程略二、安装scrapy框架 pip install Scr...

    khlbat 评论0 收藏0
  • Scrapy 实战之爬取妹子图

    摘要:很多人学习爬虫的第一驱动力就是爬取各大网站的妹子图片,比如比较有名的。最后我们只需要运行程序,即可执行爬取,程序运行命名如下完整代码我已上传到微信公众号后台,在痴海公众号后台回复即可获取。本文首发于公众号痴海,后台回复即可获取最新编程资源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 阅读文本大概需要 1...

    Achilles 评论0 收藏0

发表评论

0条评论

13651657101

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<