scrapy爬虫框架的简介

一、安装scrapy所依赖的库

1、安装wheel
    pip install wheel
2、安装lxml
    https://pypi.python.org/pypi/lxml/4.1.0
3、安装pyopenssl
    https://pypi.python.org/pypi/pyOpenSSL/17.5.0
4、安装Twisted
    https://www.lfd.uci.edu/~gohlke/pythonlibs/
5、安装pywin32
    https://sourceforge.net/projects/pywin32/files/
6、安装scrapy
    pip install scrapy

二、爬虫举例

1、创建项目

scrapy startproject zhihu

2、创建spider项目程序

cd zhihu
scrapy genspider zhihuspider www.zhihu.com

3、自动创建目录及文件

image

4、生成的爬虫具有基本的结构,我们可以直接在此基础上编写代码

# -*- coding: utf-8 -*-
import scrapy


class ZhihuSpider(scrapy.Spider):
name = "zhihuspider"
allowed_domains = ["zhihu.com"]
start_urls = ['http://www.zhihu.com/']

def parse(self, response):
    pass

5、然后,可以我们按照name来运行爬虫

scrapy crawl 'zhihuspider'

二、项目文件详细分析

1、spriders文件夹

#项目文件,以后的代码都要在这里写入
zhihuspider.py

2、items.py

from scrapy import Item,Field

class UserItem(Item):
    #Item 对象是种简单的容器,保存了爬取到得数据。 其提供了 类似于词典(dictionary-like) 的API以及用于声明可用字段的简单语法。
    # define the fields for your item here like:
    #爬取所需要的数据的名称在这里定义,很像字典
    # name = scrapy.Field()

3、pipelines.py

        当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理

###主要是处理以下4点任务

1.清理HTML数据

2.验证爬取的数据(检查item包含某些字段)

3.查重(并丢弃)

4.将爬取结果保存到数据库中

#存到mogodb数据库

import pymongo

class MongoPipeline(object):

    collection_name = 'scrapy_items'

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.collection_name].insert_one(dict(item))
        return item

4、settings.py

        用于设置常量的,例如 mongodb 的 url 和 database

BOT_NAME = 'zhihu'

SPIDER_MODULES = ['zhihu.spiders']

NEWSPIDER_MODULE = 'zhihu.spiders'

MONGO_URI='localhost'

MONGO_DATABASE='zhihu'

#默认是True的这个变量是用来是否爬robot文件的改为False是允许的意思
ROBOTSTXT_OBEY = True
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!