scrapy+mongodb

我们都知道scrapy适合爬取大量的网站信息,爬取到的信息储存到数据库显然需要更高的效率,scrapy配合mongodb是非常合适的,这里记录一下如何在scrapy中配置mongodb。

文件结构

$ scrapy startproject myscrapy

当我们创建一个scrapy工程的时候,scrapy会自动给我们创建目录结构,像下面这样:

├── scrapy.cfg
└── myscrapy
    ├── __init__.py
    ├── items.py
    ├── pipelines.py
    ├── settings.py
    └── spiders
        └── __init__.py

提取数据

items.py文件用于定义存储“容器”,用来存储将要抓取的数据。

MyscrapyItem()类继承自Item (文档),主要包含一些Scrapy已经为我们创建好的预定义对象:

import scrapy

class MyscrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass

添加一些想要收集的项。用户想要每条问题的标题和URL。那么,照这样更新items.py:

from scrapy.item import Item, Field

class MyscrapyItem(Item):
    title = Field()    url = Field()

创建蜘蛛

$ scrapy genspider myspider baidu.com

这样,scrapy会为我们在spiders目录下生成一个myspider.py的文件

import scrapyfrom myscrapy.items import MyscrapyItem  # 导入我们的item类

class MyspiderSpider(scrapy.Spider):
    name = ‘myspider‘
    allowed_domains = [‘baidu.com‘]
    start_urls = [‘http://baidu.com/‘]

    def parse(self, response):        item = MyscrapyItem()  # 实例化item类
        item[‘title‘] = response.title  # 此行为伪代码        item[‘url] = response.url        yield item  # 这句会将item数据交给pipelines处理

最初一些变量的含义很容易理解(文档):

  • 定义蜘蛛的名字。
  • allowed_domains 包含构成许可域的基础URL,供蜘蛛去爬。
  • start_urls 是一个URL列表,蜘蛛从这里开始爬。蜘蛛从start_urls中的URL下载数据,所有后续的URL将从这些数据中获取。

抓取数据的伪代码已经写好了,接下来要将拿到的数据存储到数据库中

在MongoDB中存储数据

每当有一项返回,我们想验证数据,然后添加进一个Mongo集合。

第一步是创建一个我们计划用来保存所有抓取数据的数据库。打开settings.py,指定管道然后加入数据库设置:

ITEM_PIPELINES = {
   ‘myscrapy.pipelines.MyscrapyPipeline‘: 300,
}
MONGODB_SERVER = "localhost"
MONGODB_PORT = 27017
MONGODB_DB = "crawl"
MONGODB_COLLECTION = "item" 

管道管理

我们建立了爬虫去抓取数据,而且已经设置了数据库配置。现在要在pipelines.py中通过一个管道连接两个部分。

连接数据库

首先,让我们定义一个函数去连接数据库:

import pymongo

from scrapy.conf import settings

class MyscrapyPipeline(object):
    def __init__(self):
        connection = pymongo.Connection(
            settings[‘MONGODB_SERVER‘],
            settings[‘MONGODB_PORT‘]
        )
        db = connection[settings[‘MONGODB_DB‘]]
        self.collection = db[settings[‘MONGODB_COLLECTION‘]]

    def process_item(self, item, spider):
        return item

这里,我们创建一个类,MongoDBPipeline(),我们有一个构造函数初始化类,它定义Mongo的设置然后连接数据库。

处理数据

下一步,我们需要定义一个函数去处理被解析的数据:

import pymongo

from scrapy.conf import settings
from scrapy.exceptions import DropItem
from scrapy import log

class MyscrapyPipeline(object):
    def __init__(self):
        connection = pymongo.Connection(
            settings[‘MONGODB_SERVER‘],
            settings[‘MONGODB_PORT‘]
        )
        db = connection[settings[‘MONGODB_DB‘]]
        self.collection = db[settings[‘MONGODB_COLLECTION‘]]

    def process_item(self, item, spider):
        valid = True
        for data in item:
            if not data:
                valid = False
                raise DropItem("Missing {0}!".format(data))
        if valid:
            self.collection.insert(dict(item))  # 将item解包后存入mongodb中
            log.msg("Question added to MongoDB database!",
                    level=log.DEBUG, spider=spider)
        return item

现在可以运行我们的scrapy了!

在总的myscrapy目录下运行下面命令:

$ $ scrapy crawl myscrapy

如果日志打印成功,可以去mongodb里找我们对应的数据库和集合,去查看数据。

时间: 2025-02-01 20:04:18

scrapy+mongodb的相关文章

【Python3爬虫】Scrapy+MongoDB+MySQL

分享一下两个小爬虫,都是用Scrapy写的,一个用MongoDB保存,另一个用MySQL保存. 一.Scrapy+MongoDB 主要代码: 在settings.py中添加如下代码: MONGODB_HOST = "127.0.0.1" # 本机ip地址MONGODB_PORT = 27017 # 端口号MONGODB_DB = "DouBan" # 数据库名MONGODB_COL = "DouBanDuShu" # 集合名 在pipelines

scrapy+mongodb报错 TypeError: name must be an instance of str

经过各种排查,最后找到原因,在settings文件中配置文件大小写写错了,在pipelines中 mongo_db=crawler.settings.get('MONGODB_DB'),get 获取的是'MONGO_DB',而在settings 配置文件中我配置成 MONGODB_db,最后修改成全部大写,问题解决.都是不小心惹的祸 原文地址:https://www.cnblogs.com/royfans/p/8383868.html

利用Scrapy爬取所有知乎用户详细信息并存至MongoDB

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :崔庆才 本节分享一下爬取知乎用户所有用户信息的 Scrapy 爬虫实战. 本节目标 本节要实现的内容有: 从一个大V用户开始,通过递归抓取粉丝列表和关注列表,实现知乎所有用户的详细信息的抓取. 将抓取到的结果存储到 MongoDB,并进行去重操作. 思路分析 我们都知道每个人都有关注列表和粉丝列表,尤其对于大V来说,粉丝和关注尤其更多. 如果我们从一个大V开始,首先可以获取他的个人信息,然后我们获取

scrapy爬取当当网

春节已经临近了尾声,也该收收心了.博客好久都没更新了,自己在年前写的爬虫也该“拿”出来了. 本次爬取的目标是当当网,获取当当网所有的书籍信息.采用scrapy+mongodb来采集存储数据.开干! 起始url: start_urls = ['http://category.dangdang.com/cp01.00.00.00.00.00-shlist.html'] 当当书籍的一级分类二级分类都很明显的展示了出来. ok~入口找到了,当当网也没有设置反爬措施,所以可以直接的放心爬取,如果需要大规模

爬虫推荐的工具

爬虫推荐的工具:pyspider,BeautifulSouprequestsscrapymongodbrediskafka.repyV8:python执行js的插件phatomjs:一个无界面的,可脚本编程的WebKit浏览器引擎.它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVGselenium:是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 一开始推荐学习框架,比如scrapy或者Pyspider

python3.6爬虫需要安装的模块

库的安装: 内置库 urllib re 需要安装的库 requests pip3 install requests selenium pip3 install  selenium chromedriver 下载驱动,放在配置好的环境变量下 http://npm.taobao.org/mirrors/chromedriver/ phantomjs(无界面浏览器) 下载,并且配置环境变量 http://phantomjs.org/ lxml pip3 install lxml 可能下载失败 用下面的

大神教你如果学习Python爬虫 如何才能高效地爬取海量数据

Python如何才能高效地爬取海量数据 我们都知道在互联网时代,数据才是最重要的,而且如果把数据用用得好的话,会创造很大的价值空间.但是没有大量的数据,怎么来创建价值呢?如果是自己的业务每天都能产生大量的数据,那么数据量的来源问题就解决啦,但是没有数据怎么办??哈哈哈,靠爬虫来获取呀!!! 通过利用爬虫技术获取规模庞大的互联网数据,然后做市场分析.竞品调研.用户分析.商业决策等. 也许对于小白来说,爬虫是一件非常难且技术门槛高的是,但是如果掌握了正确的方法,在短时间内可以让你应运自如.下面就分享

python爬虫起步...

最近在研究python爬虫的相关内容.一点一点来吧,由浅入深,稍微后面一点会搞搞分布式爬虫框架scrapy + MongoDB,现在先做一些requests + bs4的简单爬虫,稍后一点会将数据存放到数据库,这里先预定使用 myssql,而且爬取的基本是一些没有任何反扒机制的网站. 关于静态网页和动态网页的区别,以后也会介绍的,现在已经11点多了,起个头,洗洗睡了. 首先介绍下环境搭建. 我这里用的是win10系统,最最简单快捷的方法,真的是一个软件就解决的事,不需要下载python,不需要配

python爬虫 | 一条高效的学习路径

数据是创造和决策的原材料,高质量的数据都价值不菲.而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣.知乎:爬取优质答案,筛选出各话题下热门内容,探索用户的舆论导向. 淘宝.京东:抓取商品.评论及销量数据,对各种商品及用户的消费场景进行分析. 搜房.链家:抓取房产买卖及租售信息,分析房价变化趋势.做不同区域的房价分析. 拉勾.智联:爬取各类职位信息,分析各行业人才需求情况及薪资水平. 雪球网:抓取雪球高回报用户的行为,对股票市场进行分析和预测. 爬虫是入门Python