Scrapy框架安裝以及應用教程(代碼實例)

Scrapy中文文檔

一、win10安裝Scrapy

(1)有兩種辦法,一是用Anaconda安裝,進入命令行,輸入

conda install scrapy

爲什麼會這麼簡單呢?因爲Anaconda已經安裝好Scrapy 所需要的依賴庫了。
等待安裝進度完成後,界面如下:
在這裏插入圖片描述
(2)二是用pip安裝,pip無法直接安裝scrapy框架,需要先安裝很多依賴庫,自行。

二、檢測是否安裝成功

在這裏插入圖片描述

三、Scrapy框架介紹

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
製作Scrapy爬蟲只需4步:
(1)新建項目
(2)新建爬蟲:
(2-1)編寫 Items.py:明確你要抓取的目標
(2-2)製作爬蟲.py:編寫爬蟲文件
(2-3)存儲內容 pipelines.py:設計管道存儲爬取內容

註明出處:Scrapy框架基礎 講解及教程 - https://blog.csdn.net/qq_41500222/article/details/82850582

四、編寫第一個爬蟲

1、創建一個工程

按住shift-右鍵-在此處打開命令窗口,輸入scrapy startproject +工程名
在這裏插入圖片描述
創建成功,打開文件夾目錄如下:

.
├── 工程名
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
└── scrapy.cfg

在這裏插入圖片描述

解釋文件:

spiders:放置 spider 代碼的目錄文件 spiders(用於編寫爬蟲)

items.py:用於保存所抓取的數據的容器,其存儲方式類似於 Python 的字典

middlewares.py:下載中間件,提供一種簡便的機制,當做一個自定義擴展下載功能的組件。

pipelines.py:核心處理器,定義Item Pipeline的實現,實現數據的清洗,儲存,驗證。

settings.py:設置文件

scrapy.cfg:配置文件

自主設置:
在這裏插入圖片描述

2、定義Item

item是保存爬取數據的容器,類似字典。首先根據需要從quotes.toscrape獲取到的數據對item進行建模:

編輯 tutorial 目錄中的 items.py 文件,在item中定義我們想要抓取的字段,如下

import scrapyclass QuoteItem(scrapy.Item):    
# define the fields for your item here like:    
name = scrapy.Field()    
text = scrapy.Field()    
author = scrapy.Field()    
tags = scrapy.Field()
pass

3、編寫爬取網站的spider並提取Item

(1)編寫spider

命令窗口中,在 tutorial/spiders 目錄下,輸入命令:scrapy genspider + 爬蟲名 + 爬蟲域名 )
在這裏插入圖片描述
這樣創建的文件包含最基本的代碼,打開:

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

class QuotesSpider(scrapy.Spider):
    name = 'quotes' #spider的名字
    allowed_domains = ['quotes.toscrape.com'] #允許爬取的域名
    start_urls = ['http://quotes.toscrape.com/'] #spider爬取的網站,定義初始的請求url,可以多個

    def parse(self, response):
        pass
#parse方法:是spider的一個方法,在請求start_url之後的方法,這個方法是對網頁的解析和提取想要的東西
#response參數:請求網頁後返回的內容,即你需要解析的網頁

完善代碼:

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

from tutorial.items import QuoteItem

class QuotesSpider(scrapy.Spider):# spider的名字,該名字必須是唯一的,您不可以爲不同的Spider設定相同的名字。
   name = "quotes"
   allowed_domains = ["quotes.toscrape.com"]    # 包含了Spider在啓動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的數據中提取。
   start_urls = ['http://quotes.toscrape.com/']    # parse() 是spider的一個方法。 被調用時,每個初始URL完成下載後生成的 Response 對象將會作爲唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的 Request 對象。

   def parse(self, response):
    for quote in response.css('.quote'):
        item = QuoteItem()
        item['text']= quote.css('.text::text').extract_first()
        item['author'] = quote.css('.author::text').extract_first()
        item['tags'] = quote.css('.tags .tag::text').extract_first()

        yield item 

4、編寫Item Pipeline來存儲提取到的Item(即數據)

這裏直接使用Scrapy自帶的Pipline保存數據。

5、執行:進入根目錄

scrapy runspiderr quotes.py -o quotes.json

或者 scrapy crawl 爬蟲名 -o 結果文件

scrapy crawl quotes -o quotes.json

在這裏插入圖片描述
——————————————————————————————
參考:
爬蟲框架Scrapy的安裝與基本使用 - https://www.jianshu.com/p/6bc5a4641629
scrapy框架入門教程 - https://www.jianshu.com/p/d500ecaf7994
Scrapy基礎 - 簡書 - https://www.jianshu.com/p/5c7e3e2d4a33
——————————————————————————————

6、遇到的一些問題:

在爬蟲文件調用Items時,注意路徑設置:

(1-1)在目錄上右鍵,選擇Mark Directory As Sources root,把你的項目目錄添加到sources root
在這裏插入圖片描述

(1-2)在設置->項目->構建,執行,部署->console,勾選Add source roots to PYTHONPATH。
在這裏插入圖片描述
——————————————————————————————

運行,選對路徑!對象是你創建並命名的那個爬蟲文件!

出現問題:
在這裏插入圖片描述
原因是 當前路徑錯誤,或者路徑正確 確實丟失了scrapy.cfg文件(放上即可)。

運行爬蟲文件Error:找不到Item文件

在這裏插入圖片描述
是相對路徑問題,解決辦法:

在這裏插入圖片描述

7、待續:將數據存儲入數據庫

總結

1、三個基本命令

在這裏插入圖片描述

2、應對反爬蟲的基本策略

1、用戶代理

def start_requests(self):
        for url in self.start_urls:
            headers = random.choice(headers_pool) # 隨機選一個headers
            proxy_addr = random.choice(proxy_pool) # 隨機選一個代理
            yield scrapy.Request(url, callback=self.parse, headers=headers})

2、IP代理

def start_requests(self):
        for url in self.start_urls:
            proxy_addr = random.choice(proxy_pool) # 隨機選一個
            yield scrapy.Request(url, callback=self.parse, meta={'proxy': proxy_addr}) # 通過meta參數添加代理

proxy_addr字符串格式是’Scheme://IP:Port’

分辨靜態頁面與動態頁面

所謂靜態頁面就是說頁面文件中沒有程序,只有HTML代碼,通常以.html或.htm爲後綴名的頁面,靜態網站內容不會在製造完成後發生變化,任何人訪問都顯現一樣的內容,若你需要對內容進行更新就必須修正原代碼後再上傳到服務器上.

與靜態網頁相比動態網頁所具備的特點就是:

1.網頁文件不僅具有HTML標記,而且含有程序代碼;

2.用數據庫連接;

3.動態網頁能根據不同的時間,不同的來訪者顯示不同的內容;

4.動態網站更新方便,在後臺可直接更新.

參考:

scrapy爬取豆瓣所有電影信息(新手超詳細)

Scrapy抓取安全客漏洞(一)

Python網絡爬蟲實戰系列(全)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章