scrapy爬虫之mongodb存储

1. 创建项目

在命令行中:scrapy startproject baidu(项目名称)

2. 项目文件目录

《scrapy爬虫之mongodb存储》

3. items文件

Field对象指明了每个字段的元数据(metadata)。
爬取的主要目标就是从非结构性的数据源提取结构性数据。

import scrapy

class BaiduItem(scrapy.Item):

# define the fields for your item here like:

content = scrapy.Field()

# url=scrapy.Field()

4.pipelines 文件

将数据存储到mongodb中,在settings中设置好后,需要引入这个文件中,以保存在mongodb中。

import pymongo

from scrapy.conf import settings

classBaiduPipeline(object):

def__init__(self):

# 链接数据库

self.client = pymongo.MongoClient(host=settings[‘MONGO_HOST’],port=settings[‘MONGO_PORT’])

# 数据库登录需要帐号密码的话

# self.client.admin.authenticate(settings[‘MINGO_USER’], settings[‘MONGO_PSW’])

self.db =self.client[settings[‘MONGO_DB’]]# 获得数据库的句柄

self.coll =self.db[settings[‘MONGO_COLL’]]# 获得collection的句柄

defprocess_item(self, item,spider):

postItem =dict(item)# 把item转化成字典形式

self.coll.insert(postItem)# 向数据库插入一条记录

return item# 会在控制台输出原item数据,可以选择不写

5.spider爬虫主文件

主要为获取网页数据,分析网页结构,利用Xpath定位数据。

from scrapy.spiders import Spider

from scrapy.selector import Selector

from scrapy import Request

from baidu.items import BaiduItem# 如果报错是pyCharm对目录理解错误的原因,不影响

import scrapy

classHeartsongSpider(Spider):

name =”baidu”

allowed_domains = [“chuanke.com”]# 允许爬取的域名,非此域名的网页不会爬取

ruls =”http://www.chuanke.com/?mod=course&act=show&do=comment&sid=4509752&courseid=136902&appraise=0&comment_flag=0&page=1″

start_urls = [

# 起始url,这里设置为从最大tid开始,向0的方向迭代

ruls

]

# 用来保持登录状态,可把chrome上拷贝下来的字符串形式cookie转化成字典形式,粘贴到此处

cookies = {}

# 发送给服务器的http头信息,有的网站需要伪装出浏览器头进行爬取,有的则不需要

headers = {

# ‘Connection’: ‘keep – alive’,

‘User-Agent’:’Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36′

}

# 对请求的返回进行处理的配置

meta = {

‘dont_redirect’:True,# 禁止网页重定向

‘handle_httpstatus_list’: [301,302]# 对哪些异常返回进行处理

}

defparse(self, response):

selector = Selector(response)# 创建选择器

table = selector.xpath(‘//*[@class=”info”]’)# 取出所有的楼层

item = BaiduItem()# 实例化一个item

foreachintable:

# 通过XPath匹配信息,注意extract()方法返回的是一个list

item[‘content’] = each.xpath(‘//*[@class=”info”]/text()’).extract()

# 处理下一页问题

next_page = response.xpath(‘//*[@class=”next ajaxLink”]/@href’).extract_first()

ifnext_pageis not None:

next_page = response.urljoin(next_page)

yieldscrapy.Request(next_page,callback=self.parse)

yielditem# 将创建并赋值好的Item对象传递到PipeLine当中进行处理

6.settings文件

BOT_NAME =’baidu’

SPIDER_MODULES = [‘baidu.spiders’]

NEWSPIDER_MODULE =’baidu.spiders’

ROBOTSTXT_OBEY =False

ITEM_PIPELINES = {

‘baidu.pipelines.BaiduPipeline’:300,

}

#在settings中设置连接mongodb的设置

MONGO_HOST =”localhost”# 数据库主机IP

MONGO_PORT =27017# 端口号

MONGO_DB =”baiduSpider”# 数据库名

MONGO_COLL =”baidu”# collection名

7.运行项目

现将mongodb数据库打开

在Robomongo可视化软件中创建连接

运行scrapy项目:在命令行中输入scrapy crawl baidu(爬虫文件中的name)

参考文章http://blog.csdn.net/u012150179/article/details/34486677scrapy

多级url爬取

    原文作者:qthink
    原文地址: https://www.jianshu.com/p/a27fdf954076
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞