Scrapy与Mongodb结合爬虫
来源:互联网 发布:python编译工具 编辑:程序博客网 时间:2024/06/05 23:03
Scrapy与Mongodb结合爬虫
在学习爬虫的时候,突然发现国外的一篇关于scrapy与mongodb结合起来的爬虫,正好我也在学习scrapy与mongodb,正好将学习的过程记录下来,供以后参考,本文就从最基本的环境搭建开始做爬虫,环境为ubuntu 14.04,亲测有效。。。
- 安装scrapy
- 构建scrapy爬虫项目
- 设置DNS服务器
- 安装mongodb
- 安装robomongo可视化客户端
安装scrapy
在Ubuntu中安装各种软件在也简单不过了:
pip install scrapy
让我们新建一个爬虫项目:
scrapy startproject stack
通过这段代码我们生成了爬虫项目,会在当前文件夹下面创建stack目录。
├── scrapy.cfg└── stack ├── __init__.py ├── items.py ├── pipelines.py ├── settings.py └── spiders └── __init__.py
接下来我们来修改其中的代码,因为我们需要爬的网页为stackoverflow.com,
获取提问问题的名称与url,所以需要两个字段,所以修改后的item.py为:
from scrapy.item import Item, Fieldclass StackItem(Item): title = Field() url = Field()
现在我们来创建一个蜘蛛来爬网页,我们建立一个stack_spider.py在spiders文件夹下:
from scrapy import Spiderclass StackSpider(Spider): name = "stack" allowed_domains = ["stackoverflow.com"] start_urls = [ "http://stackoverflow.com/questions?pagesize=50&sort=newest", ]
- name :这是爬虫的名称
- allowed_domains:这是爬虫所爬的区域
- start_urls:这是爬虫开始爬的地方
HTML解析
这段代码特别令人头疼,我还没有完全搞明白,先贴上代码:
from scrapy import Spiderfrom scrapy.selector import Selectorclass StackSpider(Spider): name = "stack" allowed_domains = ["stackoverflow.com"] start_urls = [ "http://stackoverflow.com/questions?pagesize=50&sort=newest", ] def parse(self, response): questions = Selector(response).xpath('//div[@class="summary"]/h3')
代码大概意思就是,从当前网页标签中获取div class名称为summary的所有标签。
我们想要的内容就在标签里面,于是代码就变成这样:
from scrapy import Spiderfrom scrapy.selector import Selectorfrom stack.items import StackItemclass StackSpider(Spider): name = "stack" allowed_domains = ["stackoverflow.com"] start_urls = [ "http://stackoverflow.com/questions?pagesize=50&sort=newest", ] def parse(self, response): questions = Selector(response).xpath('//div[@class="summary"]/h3') for question in questions: item = StackItem() item['title'] = question.xpath( 'a[@class="question-hyperlink"]/text()').extract()[0] item['url'] = question.xpath( 'a[@class="question-hyperlink"]/@href').extract()[0] yield item
大功告成,我们先来体验一下:
scrapy crawl stack
如果不出意外的话,应该会有50个问答输出。但是我们需要将问题存储起来,需要使用非关系型数据库,我们这里使用mongodb,一种非常流行的非关系型数据库。
安装mongodb
在安装mongodb时,国内网不好,于是首先更换阿里DNS服务器:
223.5.5.5223.6.6.6
安装mongodb,根据官网的顺序:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.listsudo apt-get updatesudo apt-get install -y mongodb-orgecho "mongodb-org hold" | sudo dpkg --set-selectionsecho "mongodb-org-server hold" | sudo dpkg --set-selectionsecho "mongodb-org-shell hold" | sudo dpkg --set-selectionsecho "mongodb-org-mongos hold" | sudo dpkg --set-selectionsecho "mongodb-org-tools hold" | sudo dpkg --set-selections
到此为止,mongodb安装完成,下面就是启动:
sudo service mongod start
如果不出意外的话,mongodb的端口为:27017
将数据存储到mongodb
到此为止,所有的准备工作已经完成,我们开始编写代码来实现,首先修改setting.py指定数据库:
ITEM_PIPELINES = ['stack.pipelines.MongoDBPipeline', ]MONGODB_SERVER = "localhost"MONGODB_PORT = 27017MONGODB_DB = "stackoverflow"MONGODB_COLLECTION = "questions"
最后修改pipeline.py:
import pymongofrom scrapy.conf import settingsfrom scrapy.exceptions import DropItemfrom scrapy import logclass MongoDBPipeline(object): def __init__(self): connection = pymongo.MongoClient( 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)) log.msg("Question added to MongoDB database!", level=log.DEBUG, spider=spider) return item
我们来测试一下吧:
scrapy crawl stack
结果为:
总结
通过这次实验,我们学会了scrapy来爬虫,并将爬到的数据存储到mongodb非关系型数据库中,这是非常令人激动的。下面来系统的学习一下xpath与mongodb数据库的操作。
- Scrapy与Mongodb结合爬虫
- scrapy与redis结合实现服务化的分布式爬虫
- scrapy爬虫框架结合BeautifulSoup
- 爬虫学习(四)mongoDB与Scrapy---优化豆瓣电影实例
- 使用scrapy,redis, mongodb实现的一个分布式网络爬虫
- Scrapy定向爬虫教程(四)——数据存入MongoDB
- 手把手教你scrapy + mongodb 爬虫爬取GooglePlay
- 爬虫框架Scrapy的安装与简介
- scrpayd安装与scrapy爬虫的部署
- scrapy爬虫:CrawlSpider用法与总结
- scrapy爬虫的暂停与重启
- Scrapy爬虫地位与应用展望
- scrapy爬虫
- Scrapy 爬虫
- scrapy爬虫
- 爬虫-scrapy
- Mongodb与php开发结合
- mongodb与spring mvc结合
- 表格视图--- 基础
- 巧用Html5 History Api解决SPA的SEO问题
- POJ-2299 Ultra_QuickSort 线段树+逆序对数
- libgdx g3dj转化工具fbx-conv分割多个骨骼动画
- Git使用技巧
- Scrapy与Mongodb结合爬虫
- jsp Request获取url信息的各种方法比较
- android RecyclerView 使用完全解析 介绍(二)
- Mysql笔记_陆续完善
- 20151209linux系统日常管理第四部分(系统服务管理;系统日志,xargs与exec)
- 练习
- h264封装ts文件资料相关
- Hadoop YARN配置参数剖析(1)—RM与NM相关参数
- Android禁止横屏竖屏切换