zoukankan      html  css  js  c++  java
  • Scrapy 快速上手

    Scrapy 架構圖

    Spiders --> Scheduler --> Downloader --> 回到 Spiders,過濾抓到的資訊 --> 依 Item Pipeline 存抓到的資料

    想了更深入了解架構可以細讀這篇官方文件

    在寫 Spider 時心中要有這張圖,很重要!!

    從 Scrapy Shell 開始吧~

    Scrapy shell 這是一個 python 直譯器,可以動態顯示執行的結果。

    Step

    1. 開啟一個 Scrapy shell 抓以下網站的資料

    scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"

    2. 試一下吧~

    In [1]: sel.xpath('//title')
    Out[1]: [<Selector xpath='//title' data=u'<title>Open Directory - Computers: Progr'>]
    
    In [2]: sel.xpath('//title').extract()
    Out[2]: [u'<title>Open Directory - Computers: Programming: Languages: Python: Books</title>']
    
    In [3]: sel.xpath('//title/text()')
    Out[3]: [<Selector xpath='//title/text()' data=u'Open Directory - Computers: Programming:'>]
    
    In [4]: sel.xpath('//title/text()').extract()
    Out[4]: [u'Open Directory - Computers: Programming: Languages: Python: Books']
    
    In [5]: sel.xpath('//title/text()').re('(w+):')
    Out[5]: [u'Computers', u'Programming', u'Languages', u'Python']

    上面是使用 Xpath 語法抓網頁的資訊,預設輸出使用 JSON 格式

    3. 結束輸入exit

    對於 Xpath 語法不熟的話,可參考以下網址:

    1. http://www.w3schools.com/XPath/

    2. http://msdn.microsoft.com/zh-tw/library/ms256086(v=vs.110).aspx

    練習 Xpath 的測試網站: http://www.freeformatter.com/xpath-tester.html

    如果使用 Chrome 瀏覽器的話,可以安裝 Xpath Helper 套件,協助分析 Xpath 語法,強烈推薦!!

    經驗談: 寫 Spider 之前,先用 Scrapy shell 測試抓的資料是否正確? 確認 Xpath 語法可正確抓到想要的資料後,在開始寫 Spider 會省下很多時間。

    開始寫第一個 Spider 吧~

    基本流程如下:

    1. 建立一個新 Scrapy 專案

    2. 定義你需要的 Item

    3. 寫一個 Spider 抓資料

    4. 寫一個 Item Pipeline 存抓到的資料

    Step

    1. 建立一個專案,名稱 tutorial

    scrapy startproject tutorial

    tutorial/
    ├── tutorial
    │   ├── __init__.py
    │   ├── items.py
    │   ├── pipelines.py
    │   ├── settings.py
    │   └── spiders
    │       └── __init__.py
    └── scrapy.cfg

    2. 編輯 tutorial/tutorial/items.py 定義 Item

    1 from scrapy.item import Item, Field
    2 
    3 class DmozItem(Item):
    4     title = Field()
    5     link = Field()
    6     desc = Field()

    3. 建立 tutorial/tutorial/spiders/dmoz_spider.py 檔案,開始寫一個 Spider

     1 from scrapy.spider import Spider
     2 from scrapy.selector import Selector
     3 
     4 from tutorial.items import DmozItem
     5 
     6 class DmozSpider(Spider):
     7     name = "dmoz"   #給 Spider 取個名子
     8     allowed_domains = ["dmoz.org"]  #要抓的Domain
     9     start_urls = [
    10         "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",  #要抓的網址
    11         "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"  
    12     ]
    13 
    14     def parse(self, response):
    15         sel = Selector(response)
    16         sites = sel.xpath('//ul/li')
    17         items = []
    18         for site in sites:
    19             item = DmozItem() #之前 Step2 定義的 Item
    20             item['title'] = site.xpath('a/text()').extract() #用 Xpath 抓指定的資料
    21             item['link'] = site.xpath('a/@href').extract()
    22             item['desc'] = site.xpath('text()').extract()
    23             items.append(item)
    24         return items

    4. 執行 Spider,路徑必須在 tutorial/tutorial/spiders/ 才能執行

    scrapy crawl dmoz -o items.json -t json

    抓到的資料輸出成JSON格式的檔案,存在spiders/items.json

    如果抓中文的網站,會發現中文字變成像 u4f60u597d 的形式,原因是 python 預設編碼為 Utf-8,解決方法:

    1. 自己寫一個簡單的 PHP 程式做轉換,可參考這篇

    2. 參考這兩篇文章 1, 2

    以上範例皆來自於這篇官方文件

    英文不好的話,有翻譯官方文件,但翻譯的不是很完全,就當作參考囉。

  • 相关阅读:
    核函数基础一简单解释
    矩阵的基本性质 之 正规矩阵,矩阵的迹,行列式,伴随矩阵,矩阵的逆,对角矩阵,矩阵求导
    矩阵的基本性质 之 对称矩阵,Hermite矩阵,正交矩阵,酉矩阵
    矩阵的基本性质 之 矩阵加减法,数乘,乘法,转置
    机器学习实战基础(二十七):sklearn中的降维算法PCA和SVD(八)PCA对手写数字数据集的降维
    拉格朗日对偶性
    批处理符号2
    批处理符号1
    set命令
    goto命令
  • 原文地址:https://www.cnblogs.com/yijay/p/3629624.html
Copyright © 2011-2022 走看看