1. 程式人生 > >Scrapy框架的學習(2.scrapy入門,簡單爬取頁面,並使用管道(pipelines)儲存資料)

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