scrapy初介绍

Scrapy是为了爬取网站数据,提取结构性数据而编写的应用框架。

这篇文章将简要的介绍一下scrapy项目的基本结构,并且通过一个项目来演示整个开发流程。

scrapy的安装我们使用的是pip命令:

pip install Scrapy

首先在命令行中进入存储项目的目录中,运行如下代码:

scrapy startproject tutorial

随后自动创建一个初步的scrapy项目,项目的目录结构如下所示:

tutorial/
scrapy.cfg
tutorial/
    __init__.py
    items.py
    pipelines.py
    middlewares.py
    settings.py
    spiders/
        __init__.py
        ...
  • scrapy.cfg:项目配置文件
  • tutorial/items.py:项目的item文件
  • tutorial/pipelines.py:项目的管道文件
  • tutorial/middlewares.py:项目的中间件
  • tutorial/settings.py:项目的设置文件
  • tutorial/spiders/:编写爬虫代码的地方

Scrapy项目需要进行代码编写的主要包括items.py、settings.py、pipelines.py、spiders这几个部分.

通过cd命令进入项目

定义Item

在tutorial/items.py中定义item。

import scrapy

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

Item是一种简单的容器,用于保存爬取到的数据。

编写爬虫

我们在spiders下新建spider.py文件

import scrapy
from scrapy import Request
from ..items import TutorialItem

class TutorialSpider(scrapy.Spider):
    name="csdn"
    allowed_domains=["csdn.net"]

    start_urls=["https://blog.csdn.net/dxk_093812/article/details/81197272"]

    def parse(self,response):
        item=TutorialItem()
        text=response.xpath('//*[@id="article_content"]/div/p[1]/text()').extract()
        item['text']=text
        yield item

其中name是爬虫的名字,是唯一的,用于区别spider;start_urls表示爬虫启动时进行爬取的url列表;allow_domains用于过滤爬取的域名,不在内的域名不进行爬取。

在parse函数中,我们实例化了一个item对象,并且使用xpath表达式提取网页中的内容。关于xpath的内容今后细说。

在pipeline中处理item

在tutorial/pipelines.py下对item进行处理,在spider中获取的item对象会被传送到pipeline中进行后续的处理,可以将其持久化保存到数据库或者文件中。

我们在当前目录下创建了一个test.txt文件用于保存爬取到的文本数据。

import os

class TutorialPipeline(object):
def process_item(self, item, spider):

    file_name='\\test'
    file_path= os.getcwd()
    with open(file_path+file_name+'.txt','wb') as fp:
        fp.write(''.join(item['text']).encode('utf-8'))  

设置

需要在tutorial/settings.py中启用pipeline组件。数值一般为0-1000。数值越小越先执行。

ITEM_PIPELINES = {
'tutorial.pipelines.TutorialPipeline': 300,
}  

接下来,我们就可以启动项目,在命令行中执行

scrapy crawl csdn  

然而发现并没有爬取到什么东西,看看运行结果发现

robots.txt 是遵循 Robot协议 的一个文件,它保存在网站的服务器中,它的作用是,告诉搜索引擎爬虫,本网站哪些目录下的网页不希望你进行爬取。在Scrapy启动后,会在第一时间访问网站的robots.txt 文件,然后决定该网站的爬取范围。

所以我们在settings.py中将ROBOTSTXT_OBEY = True修改为False。再次运行,项目下出现test.txt文件,打开可以看到我们需要获取的文本。程序的运行结果详情如下。

实现一个scrapy程序的步骤大概就是这样,当然中间涉及到的知识非常多,不仅仅是这些,这里只是简单的对scrapy程序进行初步的了解。后续会更加详细的学习scrapy。

猜你喜欢

转载自blog.csdn.net/dxk_093812/article/details/82384884