python爬虫之scrapy入门

python爬虫之scrapy框架

一、scrapy框架简介

scpay框架官方文档中文版本:https://scrapy-chs.readthedocs.io/zh_CN/latest/index.html

1.1 简介

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

1.2 scrapy核心

  • Scrapy Engine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

  • Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。

  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。

  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。

  • Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。

  • Spider Middlewares(Spider中间件):一个可以自定扩展和操作引擎和Spider中间通信的功能组件。

二、scrapy框架的安装

2.1 使用anaconda进行安装scrapy

2.2.1 使用命令安装

pip install scrapy

2.2.2 使用anaconda进行安装

使用anaconda进行安装scrapy,找到对应的scrapy库进行安装即可。

python爬虫之scrapy入门_第1张图片

2.2 创建scrapy项目

scrapy startproject spider

项目创建成功。

2.3 创建爬虫程序

创建项目后进入项目文件夹,执行该命令快速创建爬虫程序,后接爬虫名、爬去站点的域名,将在spiders文件夹下生成一个基本框架的爬虫程序。

scrapy genspider [name] [domain]

2.4 保存文件

scrapy crawl [name] -o [file]

该条命令是运行name名字的爬虫,并将数据保存为file,注意file是带格式的文件名,目前支持json、json lines、csv、xml、pickle、marshal。

2.5 scrapy常用的命令

python爬虫之scrapy入门_第2张图片

三、scrapy爬虫案例

3.1 创建爬虫项目

scrapy startproject spider

3.2 创建爬虫程序

scrapy genspider job 51job.com

3.3 编写核心爬虫代码

这里采用的是xpath的方式

3.3.1 源代码

import scrapy


class JobSpider(scrapy.Spider):
    name = 'job'  # 爬虫名字
    allowed_domains = ['51job.com']  # 域名
    start_urls = ['https://search.51job.com/list/020000,000000,0000,00,9,99,python,2,1.html']  # 爬虫开始采集的网站

    def parse(self, response):
        '''
            解析数据的的,response就是start_url网址返回的数据
        :param response:
        :return:
        '''
        # print(response.text)
        # 选择出网址
        selectors = response.xpath('//div[@class="e"]')
        for selector in selectors:
            url = selector.xpath('./a/@href').get()  # 接着上一步的xpath继续选择要加个.
            # print(url)
            if url:
                yield scrapy.Request(url, callback=self.parseDetail)

    def parseDetail(self, response):
        salary = response.xpath('//div[@class="cn"]/strong/text()').get(default='')
        title = response.xpath('//div[@class="cn"]/h1/text()').get(default='')
        # com = response.xpath('//div[@class="er"]/a/text()').get(default='')
        items={
            '薪资':salary,
            '职位':title
        }
        yield items
        # return items

3.3.2 设置请求头

python爬虫之scrapy入门_第3张图片

3.4 保存到csv文件当中

scrapy crawl job -o job.csv

你可能感兴趣的:(python,python,爬虫,scrapy)