scrapy爬虫1--基础设置篇

scrapy作为一个用python编写的网络爬虫,继承了python简单易用的特点,目前已经在很多项目中所使用。

这里也是因为工作中的需要,把scrapy使用过程中的一些心得和遇到的问题记录下来以便加深记忆。

scrapy安装的过程就不在这里详述了,大家安装都会碰到各种不同的问题,主要还是因为python版本,vc++版本以及scrapy版本的兼容性引起的。

这里也附上我的安装及运行环境:windows7+python2.6+Microsoft Visual Studio 2010+scrapy 0.18

最好不要用最新scrapy版本,在一些包的依赖上会报错,导致各种各样稀奇古怪的错误。

一个简单的scrapy项目很简单,会生成4个文件和一个文件夹,scrapy爬虫就是围绕这些文件进行工作,把最主要的过程自行封装好了。(如下图)

实际的目录结构如下:

scrapy.cfg
myproject/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        spider1.py
        spider2.py
        ...

scrapy.cfg:爬虫项目的注册文件,不可修改。

items.py:用于定义蜘蛛爬行的信息分类,比如标题、正文、描述等。

items.py文件很重要,类似mvc模型中的m,用于定义最终接收的数据类型,也就是需要的数据信息。

一个典型的items.py文件信息如下:

from scrapy.item import Item, Field

class Website(Item):

    title = Field()
    description = Field()
    urls = Field()

这里就定义了一个典型的item类Website,用于接收爬虫爬下来的信息,进行第二步处理。

Pipeline.py:scrapy的管道文件,用于对抓取信息进行关键词或规则的抽取及过滤。举个例子,你现在需要抓取一类热点概念如“上海自贸区”相关的股票信息,这部分信息在个股的描述字段

里面有记录,但你抓取的页面上并没有单独将“上海自贸区”的类别独立出来,而你想要这部分的信息,那么你可以在Pipeline文件中进行定义,让蜘蛛在抓取信息后再经过一次过滤,这个过程有点类似水经过管道的过程,所以中文翻译将Pipeline.py定义为管道文件。

一个典型的Pipeline.py文件内容如下:

from scrapy.exceptions import DropItem

class FilterWordsPipeline(object):
    """A pipeline for filtering out items which contain certain words in their
    description"""

    # put all words in lowercase
    words_to_filter = [‘上海自贸区‘]

    def process_item(self, item, spider):
        for word in self.words_to_filter:
            if word not in unicode(item[‘description‘]).lower():
                raise DropItem("Contains forbidden word: %s" % word)
        else:
            return item

settings.py:scrapy项目的全局设置文件。

看名字就知道,这个文件用来设置一些全局的参数,对蜘蛛爬虫的行为进行控制,可以说是最核心的文件。

一些典型的settings参数设置如下:

SPIDER_MODULES   蜘蛛模块所在的目录,默认位于项目名/spiders

DOWNLOAD_DELAY  蜘蛛爬取页面的时间间隔,这个参数很重要,一般设置为0.5-1秒,太频繁会被对方网站封IP

USER_AGENT  用户代理信息,用来定义访问目标网站头部的user-agent信息

BOT_NAME  蜘蛛爬虫名,默认为"scrapybot",出现在headers头部信息中

CONCURRENT_ITEMS 爬虫一次可识别的对象信息个数,默认为100

CONCURRENT_REQUESTS 爬虫可同时响应的请求个数,默认为16

CONCURRENT_REQUESTS_PER_DOMAIN  针对单个域名爬虫一次可同时响应的请求个数,默认为8

DEFAULT_REQUEST_HEADERS 可定义爬虫的头部信息,用于伪装成用户进程

DOWNLOAD_TIMEOUT  设置蜘蛛爬行的超时时间

ITEM_PIPELINES  定义蜘蛛爬虫的管道信息

LOG_ENABLED  是否允许日志记录

LOG_ENCODING  日志编码

spiders:用于定义各种各样的蜘蛛文件,每个蜘蛛里面定义了其爬行网站获取信息的规则,也就是说从某个网站上以什么样的方式获取何种类型的数据都在这里面进行定义。

一个简单的spiders.py文件内容如下:

from scrapy.selector import HtmlXPathSelector
from scrapy.spider import BaseSpider
from scrapy.http import Request
from myproject.items import MyItem

class MySpider(BaseSpider):
    name = ‘example.com‘
    allowed_domains = [‘example.com‘]
    start_urls = [
        ‘http://www.example.com/1.html‘,
        ‘http://www.example.com/2.html‘,
        ‘http://www.example.com/3.html‘,
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        for h3 in hxs.select(‘//h3‘).extract():
            yield MyItem(title=h3)

        for url in hxs.select(‘//a/@href‘).extract():
            yield Request(url, callback=self.parse)

其中name为蜘蛛名词,allowed_domains为爬行的域名,start_urls为爬行的url列表,parse为解析的过程。

对于scrapy来说,一共有几大类型的蜘蛛,分别如下:

BaseSpider: 基础的爬虫类,可以说是通用的,可自行在里面重构其解析函数。

CrawlSpider:典型的爬虫蜘蛛类,可对大部分通用的网站进行爬行。

XMLFeedSpider:XML专门的爬虫类

CSVFeedSpider:适用于CSV页面的爬虫类

SitemapSpider:适用于sitemap的爬虫类

时间: 2024-11-03 01:25:41

scrapy爬虫1--基础设置篇的相关文章

scrapy爬虫框架之理解篇(个人理解)

提问: 为什么使用scrapy框架来写爬虫 ?            在python爬虫中:requests  +  selenium  可以解决目前90%的爬虫需求,难道scrapy 是解决剩下的10%的吗?显然不是.scrapy框架是为了让我们的爬虫强大高效.接下来我们一起学习一下它吧. 1.scrapy 的基础概念: scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容.Scrapy 使用了 Twisted['tw?st?

scrapy爬虫结果插入mysql数据库

1.通过工具创建数据库scrapy 2.在scrapy数据库中创建douban表 mysql> create table scrapy.douban(id int primary key auto_increment, name varchar(100) NOT NULL, author varchar(50) NULL, press varchar(100) NULL, dat e varchar(30) NULL, page varchar(30) NULL, price varchar(3

VLAN基础设置——实验篇

VLAN基础设置案例 在之前的理论篇之后:https://blog.51cto.com/14481836/2427908我们将进行vlan的配置实验 实验开始 首先打开GNS3,拖入一个路由设备和三台PC机,如图:添加路由的单板,以及配置磁盘容量. 需要注意的是,一定要设置磁盘空间,否则在设置VLAN的时候会出现报错 将三台PC机与路由连接,分别连为f1/0 f1/1 f1/2点击显示各个端口名称,并开启此时我们为设定PC机的VLAN和IP地址,设定PC2和PC3属于同一VLAN,如图:双击打开

如何让你的scrapy爬虫不再被ban

前面用scrapy编写爬虫抓取了自己博客的内容并保存成json格式的数据(scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据)和写入数据库(scrapy爬虫成长日记之将抓取内容写入mysql数据库).然而,这个爬虫的功能还是过于弱小,一旦目标网站设置了爬虫的限制,我们的爬虫也就失效了.因此这里重点讲述一下如何避免scrapy爬虫被ban.本门的所有内容都是基于前面两篇文章的基础上完成的,如果您错过了可以点击此回看:scrapy爬虫成长日记之创建工程-抽取数据-保存为json格

scrapy爬虫成长日记之将抓取内容写入mysql数据库

前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我们日常的实际应用,接下来看下如何将抓取的内容保存在常见的mysql数据库中吧. 说明:所有的操作都是在“scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据”的基础上完成,如果您错过了这篇文章可以移步这里查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 环

同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)

试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来呢? 说明:本文章是基于前面几篇文章和实验的基础上完成的.如果您错过了,或者有疑惑的地方可以在此查看: 安装python爬虫scrapy踩过的那些坑和编程外的思考 scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 scrapy爬虫成长日记之将抓取内容写入mysql数据库 如何让

Python爬虫教程-31-创建 Scrapy 爬虫框架项目

本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环境下,所以如果没有安装 Anaconda 请先到官网下载安装 Anaconda 下载地址:https://www.anaconda.com/download/ Scrapy 爬虫框架项目的创建 0.打开[cmd] 1.进入你要使用的 Anaconda 环境 1.环境名可以在[Pycharm]的[Se

scrapy爬虫基本实现和爬虫思想

今天分享下scrapy爬虫的基本使用方法,scarpy是一个比较成熟稳定的爬虫框架,方便了爬虫设计,有较强的逻辑性.我们以旅游网站为例进行介绍,一方面是旅游网站多,各个网站的适用情况不同,方便我们的学习.最后有网易云评论的一个爬取思路和不同的实现方法. 话不多说,下面是scrapy的框架: 创建scrapy爬虫的命令可以在cmd中输入 scrapy project XXXX 之后创建蜘蛛文件使用 scrapy genspider xxx "xxxx.com" 接着初始化工作就做完了,下

手把手教你如何新建scrapy爬虫框架的第一个项目(下)

前几天小编带大家学会了如何在Scrapy框架下创建属于自己的第一个爬虫项目(上),今天我们进一步深入的了解Scrapy爬虫项目创建,这里以伯乐在线网站的所有文章页为例进行说明. 在我们创建好Scrapy爬虫项目之后,会得到上图中的提示,大意是让我们直接根据模板进行创建Scrapy项目.根据提示,我们首先运行"cd article"命令,意思是打开或者进入到article文件夹下,尔后执行命令"scrapy genspider jobbole blog.jobbole.com&