1. 程式人生 > >python 之 scrapy 入門 (初入)

python 之 scrapy 入門 (初入)

在網上瀏覽了眾多scrapy入門教程
作為小白的我總結一下:
最重要的一點就是安裝Scrapy 前提是安裝好了Anaconda Navigator過後 簡直是如履平地啊!
可以借鑑https://blog.csdn.net/zjiang1994/article/details/52689144這篇部落格的安裝方法
1 . 只需要python編譯環境滿足的條件下 不需要那麼繁瑣的操作
2 . scrapy框架對python爬蟲進行了一些流程上的封裝
3 . 需要學習的就是對框架中的選擇器selector.xpath('') 的應用
在編譯環境上 編輯工具採用的 PyCharm 整合的是python3.7的版本並整合Anaconda Navigator視覺化包管理工具
這玩意兒功能是非常強悍的Anaconda Navigator


1.1 什麼是 Anaconda?
Anaconda是專注於資料分析的Python發行版本,包含了conda、Python等190多個科學包及其依賴項。作為好奇寶寶的你是不是發現了一個新名詞 conda,那麼你一定會問 conda 又是什麼呢?

1.2 什麼是 conda ?
conda 是開源包(packages)和虛擬環境(environment)的管理系統。

packages 管理: 可以使用 conda 來安裝、更新 、解除安裝工具包 ,並且它更關注於資料科學相關的工具包。在安裝 anaconda 時就預先集成了像 Numpy、Scipy、 pandas、Scikit-learn 這些在資料分析中常用的包。另外值得一提的是,conda 並不僅僅管理Python的工具包,它也能安裝非python的包。比如在新版的 Anaconda 中就可以安裝R語言的整合開發環境 Rstudio。

虛擬環境管理: 在conda中可以建立多個虛擬環境,用於隔離不同專案所需的不同版本的工具包,以防止版本上的衝突。對糾結於 Python 版本的同學們,我們也可以建立 Python2 和 Python3 兩個環境,來分別執行不同版本的 Python 程式碼。

1.3 Anaconda 的優點?
Anaconda的優點總結起來就八個字:省時省心、分析利器。

省時省心: Anaconda通過管理工具包、開發環境、Python版本,大大簡化了你的工作流程。不僅可以方便地安裝、更新、解除安裝工具包,而且安裝時能自動安裝相應的依賴包,同時還能使用不同的虛擬環境隔離不同要求的專案。

分析利器: 在 Anaconda 官網中是這麼宣傳自己的:適用於企業級大資料分析的Python工具。其包含了720多個數據科學相關的開源包,在資料視覺化、機器學習、深度學習等多方面都有涉及。不僅可以做資料分析,甚至可以用在大資料和人工智慧領域。
” 可以觀賞

https://www.jianshu.com/p/169403f7e40c 的部落格 怎麼安裝和使用

以上就為scrapy做好了準備了 不再需要那麼繁瑣的操作了

接下來我們就只需要在PyCharm控制檯 操作scrapy建立專案了 scrapy startproject Demo3
記住一點就是在建立scrapy專案時一定要把目錄切換的工作空間下進行建立

建立專案

目錄結構如下:
目錄結構

建立好專案後需將python切換配置Anaconda 模板源

這裡寫圖片描述

就是切換這裡的資源路徑 切換到安裝好的Anaconda 下的python.exe

這裡寫圖片描述

scrapy.cfg: 專案的配置檔案
Demo3/: 該專案的python模組。之後您將在此加入程式碼。
Demo3/items.py: 專案中的item檔案.相當於spring 中的model檔案
Demo3/pipelines.py: 專案中的pipelines檔案.用於處理資料的儲存
Demo3/settings.py: 專案的設定檔案.
Demo3/spiders/: 放置spider程式碼的目錄. 放置爬蟲類的位置

第一步在spiders 下建立自己的爬蟲MyScr.py

# !/usr/bin/env python3
# -*- coding:utf-8 -*-

__author__ = 'lilu'

import scrapy
# 引入本地的模板
from Demo3.Citems import Citme


class MyScr(scrapy.Spider):

    # 設定全域性唯一的name
    name = 'MyScr1'

    # 填寫爬取地址
    start_urls = ['http://news.sina.com.cn/china/']

    # 編寫爬取方法
    def parse(self, response):
        # 例項一個容器儲存爬取的資訊
        item = Citme()
        # 這部分是爬取部分,使用xpath的方式選擇資訊,具體方法根據網頁結構而定
        # 先獲取每個課程的div
        for box in response.xpath('//div[@class="news-item  img-news-item"]'):
            # 獲取div中的課程標題
            item['title'] = box.xpath('.//a/text()').extract()[0].strip()

            # 返回資訊
            yield item

再次強調 以上name引數是全域性唯一的
在這個MyScr.py中我們用到了Scrapy元素選擇器Xpath 在這裡就不多介紹了 走重點

第二步在Demo3子目錄下 items.py 同級建立自己的model類Citems.py

# !/usr/bin/env python3
# -*- coding:utf-8 -*-

__author__ = 'lilu'

import scrapy

# 編寫model模板
class Citme(scrapy.Item):
    # 儲存標題
    title = scrapy.Field()

這個類就相當於spring 中的model類 我們在MyScr.py檔案中引入了model
看一下當前的目錄結構:
目錄結構
到這裡我們就可以試著執行這個爬蟲了 在控制檯執行scrapy crawl MyScr1 命令,
這裡注意的點就是MyScr1 是我們之前設定的name 屬性
執行結果(雖然格式有點亂但是我們要得資料是爬取到了):
爬取結果

接下來我們就可以對資料進行入庫處理了,當前只是演示 寫入json檔案

第三步在Demo3子目錄下 pipelines.py 同級建立自己的資料處理類MyPipelines.py

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

__author__ = 'lilu'

import json


class MyPipeline(object):
    def __init__(self):
        # 開啟檔案
        self.file = open('data.json', 'w', encoding='utf-8')

    # 該方法用於處理資料
    def process_item(self, item, spider):
        # 讀取item中的資料
        line = json.dumps(dict(item), ensure_ascii=False) + "\n"
        # 寫入檔案
        self.file.write(line)
        # 返回item
        return item

    # 該方法在spider被開啟時被呼叫。
    def open_spider(self, spider):
        pass

    # 該方法在spider被關閉時被呼叫。
    def close_spider(self, spider):
        pass

當然要使用 pipelines 需要在 settings.py 中進行配置

ITEM_PIPELINES = {
    'Demo3.MyPipelines.MyPipeline': 1,
}

上面的程式碼用於註冊Pipeline,其中scrapytest.MyPipelines.MyPipeline為你要註冊的類,右側的’1’為該Pipeline的優先順序,範圍1~1000,越小越先執行。

進行完以上操作,我們的一個最基本的爬取操作就完成了

這時我們再執行 scrapy craml MyScr1
會發現多了一個data.json檔案
目錄結構
開啟data.json

{"title": "北京平均1963人搶1個普通車指標 新能源至少等4年"}
{"title": "英烈保護法草案擬增加條款 打擊“精日分子”"}
{"title": "新疆阿圖什市發生3.2級地震 震源深度57千米"}
{"title": "我國瞄準短板攻關10年 核心電子器件告別缺芯少魂"}
{"title": "專家建言京津冀大氣治理:長途大宗貨物用鐵路運輸"}
{"title": "西班牙警方搗毀一個假奶粉包裝廠 主要將銷往中國"}
{"title": "上海公安局迎來新領導:曾跨國追捕“美女高管”"}
{"title": "西安書記自曝每天工作16小時 一天三四個會是常態"}
{"title": "內蒙古自治區政府副主席白向群被查(圖/簡歷)"}
{"title": "江西三縣市區被省環保廳約談:空氣質量全省排倒數"}
{"title": "加拿大參院通過涉南海動議 中方迴應"}
{"title": "陳水扁稱綠營選舉恐崩潰 港媒:語不驚人死不休"}
{"title": "中國3月進口美大豆數量劇減 外媒:與貿易摩擦有關"}
{"title": "26日起華南等地將有較強降水 局地暴雨或大暴雨"}
{"title": "媒體:香港不缺少土地 缺的是向自己動刀子的能力"}
{"title": "中美貿易戰問題歐洲站隊了:這次不支援美國人"}
{"title": "中國2030年或實現載人登月 下一目標:送人到火星"}
{"title": "“中日智庫媒體高階對話會”順利在日本舉行"}

到這裡就完成了一個簡單的爬蟲了