python scrapy爬蟲入門

最近因為工作需要,自學了python、scrapy并且寫出了自己的第一個爬蟲項目。記錄過程:

  • 所用的系統(tǒng):Ubuntu gnome 16.04
  • IDE: pycharm

安裝Setuptools&Pip以及scrapy

  • 安裝Pip

最新版本的linux發(fā)行版(CentOS,Fedora,RHEL以及Ubuntu)都自帶python2.7以及python3,默認情況下使用的是Python2.7,因此在terminal中輸入$ python --version的時候找的是python2,若想使用Python3,可以輸入$ python3 --version。

Setuptools和Pip是最重要的兩個python第三方軟件安裝包,它們可以實現(xiàn)一行命令自動下載所需要的應用包到python庫里面供項目使用。python2.7.9之后以及python3.4之后的版本均默認下載安裝了Pip,可以使用$ command -v pip查看Pip是否已經(jīng)安裝。若沒有安裝,則可以先 下載get pip.py 到計算機,然后就可以輸入$ python pip.py來進行Pip的安裝。

  • 安裝scrapy

在安裝完成了python以及pip之后,鍵入下面的命令安裝scrapy

$ pip install scrapy

創(chuàng)建爬蟲項目

在安裝完成后scrapy之后,就可以創(chuàng)建爬蟲項目了,首先,在terminal中進入想創(chuàng)建項目的目錄(workspace),例如筆者就是/usr/local/pythonProjects,之后鍵入

$ scrapy startproject projectName  //最后的'projectName'替換為想要的項目名稱

回車之后,scrapy就會自動為你創(chuàng)建爬蟲目錄,用python編輯器打開這個目錄(推薦sublime text或者pycharm),會看見項目目錄結構如下:

projectName/
    scrapy.cfg
    projectName/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

這些文件分別代表:

  • scrapy.cfg:項目的總配置文件
  • projectName/item.py: 項目中的item文件。(個人理解:類似于java中的pojo或者dto)
  • projectName/pipelines.py:項目中的pipeline文件。(用于將抓取到的數(shù)據(jù)存進數(shù)據(jù)庫中)
  • projectName/settings.py:項目中的設置文件。
  • projectName/spiders/:用來存在爬蟲文件的目錄,稍后將在這個目錄下寫爬蟲文件。

至此,一個爬蟲項目創(chuàng)建就算成功了,下面開始寫代碼啦。

編寫item文件

item文件 是用來保存我們爬取到的數(shù)據(jù)的容器,爬取下來的數(shù)據(jù)會放入item中來封裝進行下一步處理(存入數(shù)據(jù)庫),所以,item文件其實就相當于java中的實體類(pojo),用來將我們需要的數(shù)據(jù)封裝成一個一個的整體(對象)。因此,item文件需要我們對需要的數(shù)據(jù)和業(yè)務需求進行分析之后來編寫。

例如,筆者所要爬取的網(wǎng)站是 有效質檢機構的查詢網(wǎng)站 中的所有機構的數(shù)據(jù),對該網(wǎng)站中機構的數(shù)據(jù)結構進行分析,發(fā)現(xiàn)需要的數(shù)據(jù)有 質檢機構名稱質檢機構的注冊編號 等信息,將每一個質檢機構看做一個獨立的對象,寫出item.py文件如下:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

#類的名字根據(jù)實際情況更改
class CrawlerItem(scrapy.Item):
    name = scrapy.Field()   #質檢機構名稱
    register_id = scrapy.Field()  #機構的注冊編號
    alias = scrapy.Field()    #報告/證書允許使用認可標識的其他名稱
    contact = scrapy.Field()    #聯(lián)系人
    phone_num = scrapy.Field()    #聯(lián)系電話
    zip_code = scrapy.Field()    #郵政編碼
    fax_num = scrapy.Field()    #傳真號碼
    website = scrapy.Field()    #網(wǎng)站地址
    email = scrapy.Field()    #電子郵箱
    company_address = scrapy.Field()    #公司地址
    validity_term = scrapy.Field()    #認可有效期限
    ability_range = scrapy.Field()    #能力范圍
    close_project = scrapy.Field()    #暫停項目/參數(shù)
    certificate = scrapy.Field()    #證書附件

一開始可能看起來很復雜,但是定義了item.py之后,您就可以很方便的使用scrapy的其他方法(例如pipeline.py中的方法),因為這些方法需要只要您對item的定義。

編寫第一個爬蟲(Spider文件)

一個爬蟲(Spider)是從一個或多個網(wǎng)站用來爬取需要的數(shù)據(jù)的類。

為了創(chuàng)建一個爬蟲,必須集成scrapy.Spider類,并且定義以下兩個屬性和一個方法:

  • name:爬蟲的名字,必須唯一,不能有重復名字的爬蟲存在于一個項目中。
  • start_urls:一個列表,由spider在開始啟動的時候需要爬取的url組成,spider會爬取這個list中的所有url,可以在爬取到新url之后將新的url添加進去。
  • parse(self,response):此方法會在spider每爬取完成一個網(wǎng)頁后調用,每次爬取網(wǎng)站下載的數(shù)據(jù)會通過response參數(shù)傳遞給此方法,在此方法中您可以對response進行操作。

知道了如何編寫spider之后,在目錄projectName/spiders/ 下新建tutorial_spider.py文件,并編寫代碼:

import scrapy


class TutorialSpider(scrapy.Spider):
    name = 'tutorial'   #爬蟲的名字
    start_urls = ['https://las.cnas.org.cn/LAS/publish/externalQueryL1.jsp']  #要爬取的網(wǎng)站列表

    def parse(self, response):
        print(response.body)    #打印網(wǎng)站的靜態(tài)代碼(此種方法無法獲取由js動態(tài)生成的數(shù)據(jù))

之后打開terminal,進入項目根目錄,如/usr/local/pythonProjects/projectName,鍵入以下命令以啟動爬蟲。

$ scrapy crawl spider_name   #將spider_name改為爬蟲的名稱(即name的值)

如果順利,您應該可以看見該網(wǎng)頁的html代碼了。當然,您也可以更改parse(self, response)中的代碼,利用response做更多的事。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容