爬蟲-Scrapy框架

一:介紹

1:scrapy介紹

Scrapy一個開源和協做的框架,其最初是爲了頁面抓取 (更確切來講, 網絡抓取 )所設計的,使用它能夠以快速、簡單、可擴展的方式從網站中提取所需的數據。但目前Scrapy的用途十分普遍,可用於如數據挖掘、監測和自動化測試等領域,也能夠應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。html

所謂的框架就是一個已經被集成了各類功能(高性能異步下載,隊列,分佈式,解析,持久化等)的具備很強通用性的項目模板。對於框架的學習,重點是要學習其框架的特性、各個功能的用法便可。python

二:安裝

1:安裝

Linux:

      pip3 install scrapy
 
Windows:
      a. pip3 install wheel
      b. 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
      c. 進入下載目錄,執行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
      d. pip3 install pywin32
      e. pip3 install scrapy

 

  出現上面的證實安裝完成了ajax

2:scrapy命令行工具

#1 查看幫助
    scrapy -h
    scrapy <command> -h

#2 有兩種命令:其中Project-only必須切到項目文件夾下才能執行,而Global的命令則不須要
    Global commands:
        startproject #建立項目
        genspider    #建立爬蟲程序
        settings     #若是是在項目目錄下,則獲得的是該項目的配置
        runspider    #運行一個獨立的python文件,沒必要建立項目
        shell        #scrapy shell url地址  在交互式調試,如選擇器規則正確與否
        fetch        #獨立於程單純地爬取一個頁面,能夠拿到請求頭
        view         #下載完畢後直接彈出瀏覽器,以此能夠分辨出哪些數據是ajax請求
        version      #scrapy version 查看scrapy的版本,scrapy version -v查看scrapy依賴庫的版本
    Project-only commands:
        crawl        #運行爬蟲,必須建立項目才行,確保配置文件中ROBOTSTXT_OBEY = False
        check        #檢測項目中有無語法錯誤
        list         #列出項目中所包含的爬蟲名
        edit         #編輯器,通常不用
        parse        #scrapy parse url地址 --callback 回調函數  #以此能夠驗證咱們的回調函數是否正確
        bench        #scrapy bentch壓力測試

#3 官網連接
    https://docs.scrapy.org/en/latest/topics/commands.html

 

 

 

三:scrapy項目建立以及項目結構

1:項目運行相關命令 

#一、執行全局命令:請確保不在某個項目的目錄下,排除受該項目配置的影響
scrapy startproject MyProject #建立項目

------------------------------------------------- cd MyProject scrapy genspider baidu www.baidu.com
#建立爬蟲文件baidu
scrapy genspider 應用名稱 爬取網頁的起始url 

-------------------------------------------------------- scrapy settings
--get XXX #若是切換到項目目錄下,看到的則是該項目的配置 scrapy runspider baidu.py scrapy shell https://www.baidu.com response response.status response.body view(response) scrapy view https://www.taobao.com #若是頁面顯示內容不全,不全的內容則是ajax請求實現的,以此快速定位問題 scrapy fetch --nolog --headers https://www.taobao.com scrapy version #scrapy的版本 scrapy version -v #依賴庫的版本 #二、執行項目命令:切到項目目錄下 scrapy crawl baidu #執行baidu爬蟲文件
scrapy crawl  應用名稱 --nolog #執行爬蟲程序,不顯示日誌
scrapy check scrapy list scrapy parse http:
//quotes.toscrape.com/ --callback parse scrapy bench

 2:項目目錄結構

project_name/
   scrapy.cfg:
   project_name/
       __init__.py
       items.py
       pipelines.py
       settings.py
       spiders/
           __init__.py

scrapy.cfg   項目的主配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
items.py     設置數據存儲模板,用於結構化數據,如:Django的Model
pipelines    數據持久化處理
settings.py  配置文件,如:遞歸的層數、併發數,延遲下載等,強調:配置文件的選項必須大寫不然視爲無效,正確寫法USER_AGENT='xxxx'
spiders      爬蟲目錄,如:建立文件,編寫爬蟲解析規則

 注意:通常建立爬蟲文件時,以網站域名命名shell

四:基礎使用

1:案例模板

1.1建立項目:

  scrapy startproject 項目名稱瀏覽器

1.2建立爬蟲應用程序:

      cd project_name(進入項目目錄)bash

      scrapy genspider 應用名稱 爬取網頁的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)網絡

1.3編寫爬蟲文件:

  在步驟2執行完畢後,會在項目的spiders中生成一個應用名的py爬蟲文件,文件源碼以下:併發

 

import scrapy

class QiubaiSpider(scrapy.Spider):
    name = 'qiubai' #應用名稱
    #容許爬取的域名(若是遇到非該域名的url則爬取不到數據)
    allowed_domains = ['https://www.qiushibaike.com/']
    #起始爬取的url
    start_urls = ['https://www.qiushibaike.com/']

     #訪問起始URL並獲取結果後的回調函數(解析數據),該函數的response參數就是向起始的url發送請求後,獲取的響應對象.該函數返回值必須爲可迭代對象或者NUll 
     def parse(self, response):
        print(response.text) #獲取字符串類型的響應內容
        print(response.body)#獲取字節類型的相應內容

 

1.4設置修改settings.py配置文件相關配置:

修改內容及其結果以下:
19行:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #假裝請求載體身份

22行:ROBOTSTXT_OBEY = False  #能夠忽略或者不遵照robots協議

  

1.5執行爬蟲程序:

  scrapy crawl  應用名稱app

相關文章
相關標籤/搜索