上個部落格寫了: Scrapy的概念以及Scrapy的詳細工作流程 Scrapy架構的學習(1.scrapy的概念以及scrapy的工作流程)_還是那個同偉偉的部落格-CSDN部落格
1.scrapy的安裝 pip install scrapy
2.建立Scarpy項目:
在cmd中進入到想要建立Scrapy項目的路徑下(最好在已經建立好的pycharm的工程路徑下,就不用導入Python編譯器等): 輸入指令建立:scrapy startproject scrapy的項目名稱
建立之後,可以在pycharm中檢視已經建立了什麼,一個![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) ![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) items.py 可以預先定義好爬取那些字段
middlewares.py : 中間鍵
pipelines.py: 管道 , 進行資料的處理以及儲存
settings.py : 整個項目的設定
spiders檔案夾; 建立好的爬蟲,建立好是空的
3.生成一個爬蟲
首先cd 建立的scrapy的項目名
然後 scrapy genspider 爬蟲名 域名(即爬取的範圍)
然後進入到pycharm中檢視生成的東西:![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) ![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) 4.然後就可以寫爬蟲了, 這是一個專門測試scrapy的爬蟲網站 :Quotes to Scrape 裡面是一些名言名句
在剛才建立好的爬蟲名字的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)
![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) 5. 啟動爬蟲的架構:
首先cmd中進入到你剛才建立的項目路徑下。
輸入指令: scrapy crawl 爬蟲名
(1)會列印出很多的東西,包括日志等等,
(2)看着有點亂,我們可以在settings.py加入下面設定![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) LOG_LEVEL = "WARNING"
然後在執行指令就可以了 : scrapy crawl 爬蟲名![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) ![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) 可以看到爬取的資料都在一個清單當中,清單當中的每個元素是一個Selector對象,
(3). 直接取出當中的資料 extract()方法,可以在代碼中這樣寫
然後在執行啟動架構,運作指令,可以看到資料就取出來了ret1 = response.xpath("//span[@class='text']//text()").extract()
有關取值:![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) ![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) 當使用extrat_first()的時候,如果xpath寫錯的話,取值的會是一個空值,None
6. pipelines管道的使用,
首先要在pipelines裡面開啟 ,在settings.py裡面把這個注釋去掉就行
![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) 是一個字典, 鍵代表位置,值代表距離引擎的遠近,即權重
對值的解釋: 我們可以定義多個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
![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料) pipelines.py:
然後開啟架構,檢視儲存的資料text.txt# -*- 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("儲存資料成功")
![]()
Scrapy架構的學習(2.scrapy入門,簡單爬取頁面,并使用管道(pipelines)儲存資料)