Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)

上个博客写了:  Scrapy的概念以及Scrapy的详细工作流程 https://blog.csdn.net/wei18791957243/article/details/86154068

1.scrapy的安装  pip install scrapy

 2.创建Scarpy项目:

   在cmd中进入到想要创建Scrapy项目的路径下(最好在已经创建好的pycharm的工程路径下,就不用导入Python编译器等):    输入命令创建:scrapy startproject scrapy的项目名称

  

 创建之后,可以在pycharm中查看已经创建了什么,一个

  

 items.py  可以预先定义好爬取那些字段

 middlewares.py  : 中间键

 pipelines.py:  管道  , 进行数据的处理以及保存

 settings.py  :  整个项目的设置

spiders文件夹;  创建好的爬虫,创建好是空的

3.生成一个爬虫   

   首先cd 创建的scrapy的项目名

   然后  scrapy  genspider   爬虫名   域名(即爬取的范围)

  

然后进入到pycharm中查看生成的东西:

          

4.然后就可以写爬虫了,  这是一个专门测试scrapy的爬虫网站 :http://quotes.toscrape.com/  里面是一些名言名句

   在刚才创建好的爬虫名字的py文件里面写。

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


class ScrapetestSpider(scrapy.Spider):
    name = 'scrapeTest'  # 爬虫名
    '''允许爬取的范围'''
    allowed_domains = ['quotes.toscrape.com']
    '''最开始请求的url地址'''
    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
        """处理start_url地址对应的响应"""
        # 爬取页面上的名言
        ret1 = response.xpath("//span[@class='text']//text()")
        print(ret1)

  然后打印出这个名言, 

   

5.  启动爬虫的框架:

首先cmd中进入到你刚才创建的项目路径下。

 输入命令: scrapy crawl 爬虫名

(1)会打印出很多的东西,包括日志等等,

(2)看着有点乱,我们可以在settings.py加入下面设置

LOG_LEVEL = "WARNING"

然后在执行命令就可以了  : scrapy crawl 爬虫名

 可以看到爬取的数据都在一个列表当中,列表当中的每个元素是一个Selector对象,

(3). 直接取出当中的数据  extract()方法,可以在代码中这样写

ret1 = response.xpath("//span[@class='text']//text()").extract()

然后在执行启动框架,运行命令,可以看到数据就取出来了 

  有关取值:

 

 当使用extrat_first()的时候,如果xpath写错的话,取值的会是一个空值,None

6. pipelines管道的使用,   

  首先要在pipelines里面开启  ,在settings.py里面把这个注释去掉就行

   

是一个字典, 键代表位置,值代表距离引擎的远近,即权重

 对值的解释:  我们可以定义多个pipeline,数据会先进行一个pipeline再进行一个pipeline,进入的pipeline的先后顺序就可以通过值来指定。值越小会先执行

  爬虫名字.py:

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


class ScrapetestSpider(scrapy.Spider):
    name = 'scrapeTest'  # 爬虫名
    '''允许爬取的范围'''
    allowed_domains = ['quotes.toscrape.com']
    '''最开始请求的url地址'''
    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
        """处理start_url地址对应的响应"""
        # 爬取页面上的名言
        text = response.xpath("//span[@class='text']//text()").extract()
        # 爬取页面上的作者
        aut = response.xpath("//small[@class='author']//text()").extract()
        for li in range(len(text)):
            item = {}
            item["author"] = aut[li]
            item["text"] = text[li]
            yield item

 

pipelines.py:
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import json
class MyspiderPipeline(object):
    def process_item(self, item, spider):
        with open("text.txt",'a') as f:
            f.write(json.dumps(item,ensure_ascii=False)+"\n")
        return item

    print("保存数据成功")

然后开启框架,查看保存的数据text.txt

猜你喜欢

转载自blog.csdn.net/wei18791957243/article/details/86157707