1. 程式人生 > >Python爬蟲框架Scrapy學習三記—讓蟲子爬

Python爬蟲框架Scrapy學習三記—讓蟲子爬

本文將假設我們的scrapy環境已經OK了,然後我們來開始進行第一次爬行體驗。本文將實現以下操作:

  • 建立一個Scrapy專案
  • 定義提取的Item
  • 編寫爬取網站的 spider 並提取 Item
  • 編寫 Item Pipeline 來儲存提取到的Item(即資料)

1. 建立一個Scrapy專案

一般我建議在學習或者工作目錄下單獨建立一個目錄來存放某一個特定學習專案或者文件(建議而已),直接上命令:

scrapy startproject first_spider
#命令串解釋:命令 建立新專案的動作 專案名稱(隨便起)

建立好之後我們會看到專案結構如下(劃掉的部分為後面寫的爬蟲檔案以及爬蟲爬取到的檔案,初始沒有的):
這裡寫圖片描述


目錄中部分檔案的作用和含義如下:

scrapy.cfg: 專案的配置檔案
first_spider/: 該專案的python模組。之後您將在此加入程式碼。
first_spider/items.py: 專案中的item檔案.
first_spider/pipelines.py: 專案中的pipelines檔案.
first_spider/settings.py: 專案的設定檔案.
first_spider/spiders/: 放置spider程式碼的目錄.

2. 定義Item

Item 是儲存爬取到的資料的容器;其使用方法和python字典類似, 並且提供了額外保護機制來避免拼寫錯誤導致的未定義欄位錯誤。

首先根據需要從runoob.com獲取到的資料對item進行建模。 我們需要從根據爬蟲獲取名字,url,以及網站的描述。 對此,在item中定義相應的欄位。編輯 first_spider目錄中的 items.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
class FirstSpiderItem(scrapy.Item)
:
# define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field()

3. 編寫第一個爬蟲(Spider)來爬取網頁

為了建立一個Spider,必須要繼承 scrapy.Spider 類, 且定義以下三個屬性:

  • name: 用於區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。到時候我們啟動爬蟲就根據這個名字來的。

  • start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的資料中提取。

  • parse() 是spider的一個方法。 被呼叫時,每個初始URL完成下載後生成的 Response 物件將會作為唯一的引數傳遞給該函式。 該方法負責解析返回的資料(response data),提取資料(生成item)以及生成需要進一步處理的URL的 Request 物件。

以下為我們的第一個Spider程式碼,儲存在 first_spider/spiders 目錄下的 halo_spider.py 檔案中:

import scrapy

class DmozSpider(scrapy.Spider):
    name = "firstSpider"
    #爬蟲的名字
    allowed_domains = ["runoob.com"]
    #所允許爬取得域
    start_urls = [
        "http://www.runoob.com/sql/",
        "http://www.runoob.com/python/"
    ]
    #爬蟲開始的連結urls

    def parse(self, response):
    #定義對於爬蟲的返回結果的處理,這裡只是做了一個檔案儲存,到時候就會有sql和python兩個檔案生成
        filename = response.url.split("/")[-2]
        with open(filename, 'wb') as f:
            f.write(response.body)

4. 開爬,讓蟲子動起來

進入專案的根目錄(本例中是first_spider),執行下列命令啟動spider:

scrapy crawl firstSpider

爬蟲啟動截圖:
這裡寫圖片描述

爬去過程截圖:
這裡寫圖片描述

爬去結果截圖(得到了兩個檔案sql和python),檢視python名稱的檔案內容發現是一個網頁檔案
這裡寫圖片描述

此過程中:Scrapy為Spider的 start_urls 屬性中的每個URL建立了 scrapy.Request 物件,並將 parse 方法作為回撥函式(callback)賦值給了Request。

Request物件經過排程,執行生成 scrapy.http.Response 物件並送回給spider parse() 方法。

5. 提取Item

提取資料

從網頁中提取資料有很多方法。Scrapy使用了一種基於 XPath 和 CSS 表示式機制: Scrapy Selectors ,沒接觸過的人可以理解為正則表示式。
我們重新寫一下爬蟲的處理函式,利用 .xpath() 呼叫返回selector組成的list,拼接更多的 .xpath() 來進一步獲取某個節點資訊:

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            title = sel.xpath('a/text()').extract()
            link = sel.xpath('a/@href').extract()
            desc = sel.xpath('text()').extract()
            print(title, link, desc)

由下圖的結果可以看出,爬取得結果現在只包含了網頁的標題、連結、描述(大部分為空):
這裡寫圖片描述

使用item

Item 物件是自定義的python字典。 您可以使用標準的字典語法來獲取到其每個欄位的值。一般來說,Spider將會將爬取到的資料以 Item 物件返回。所以為了將爬取的資料返回,我們最終的程式碼將是:
import scrapy
from first_spider.items import FirstSpiderItem
class DmozSpider(scrapy.Spider):
    name = "firstSpider"
    allowed_domains = ["runoob.com"]
    start_urls = [
        "http://www.runoob.com/sql/",
        "http://www.runoob.com/python/"
    ]
    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            item = FirstSpiderItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('text()').extract()
            yield item

執行結果如下:
可以看到爬取得結果成了字典對映的結構,內容更加清晰了
這裡寫圖片描述

6. 儲存爬取到的資料

scrapy crawl dmoz -o runoob.json
#-o後面跟檔名稱

該命令將採用 JSON 格式對爬取的資料進行序列化,生成 runoob.json 檔案。

執行結果截圖如下,可以看到爬去的資料以json的格式儲存到了檔案中:
這裡寫圖片描述

在類似本篇教程裡這樣小規模的專案中,這種儲存方式已經足夠。 如果需要對爬取到的item做更多更為複雜的操作,可以編寫 Item Pipeline 。 類似於我們在建立專案時對Item做的,用於編寫自己的 first_spider/pipelines.py 也被建立。

相關推薦

Python爬蟲框架Scrapy學習蟲子

本文將假設我們的scrapy環境已經OK了,然後我們來開始進行第一次爬行體驗。本文將實現以下操作: 建立一個Scrapy專案 定義提取的Item 編寫爬取網站的 spider 並提取 Item 編寫 Item Pipeline 來儲存提取到的Item(即

Python爬蟲框架Scrapy學習——認識Scrapy

Preface (Preface不知道啥意思?!總認識裡面那張臉吧,前+臉,恩,沒錯,前臉的意思) 同志既然你能找到這裡說明你起碼知道Python,知道Python的Scrapy框架,但是你是否瞭解,並且知道用法呢?如果不瞭解,我帶著你咱們走! 申明:

Python 3網路爬蟲開發實戰+精通Python爬蟲框架Scrapy學習資料

《Python 3網路爬蟲開發實戰》介紹瞭如何利用Python 3開發網路爬蟲,首先介紹了環境配置和基礎知識,然後討論了urllib、requests、正則表示式、Beautiful Soup、XPath、pyquery、資料儲存、Ajax資料爬取等內容,接著通過多個案例介紹了不同場景下如何實現資料爬取,後介

Python 3網絡爬蟲開發實戰+精通Python爬蟲框架Scrapy學習資料

分布式 過多 博客 開發實戰 pyquery 閱讀 表達式 故障 hub 《Python 3網絡爬蟲開發實戰》介紹了如何利用Python 3開發網絡爬蟲,首先介紹了環境配置和基礎知識,然後討論了urllib、requests、正則表達式、Beautiful Soup、XPa

Python爬蟲框架Scrapy學習筆記

開發十年,就只剩下這套架構體系了! >>>   

Python爬蟲框架Scrapy例項()資料儲存到MongoDB

Python爬蟲框架Scrapy例項(三)資料儲存到MongoDB任務目標:爬取豆瓣電影top250,將資料儲存到MongoDB中。 items.py檔案複製程式碼# -*- coding: utf-8 -*-import scrapy class DoubanItem(scrapy.Item): # d

資料視覺化 步走(一):資料採集與儲存,利用python爬蟲框架scrapy取網路資料並存儲

前言     最近在研究python爬蟲,突然想寫部落格了,那就寫點東西吧。給自己定個小目標,做一個完整的簡單的資料視覺化的小專案,把整個相關技術鏈串聯起來,目的就是為了能夠對這塊有個系統的認識,具體設計思路如下: 1. 利用python爬蟲框架scr

Python爬蟲框架Scrapy實例(二)

head sports spi 工作目錄 http 鏈接 進入 效果 tex 目標任務:使用Scrapy框架爬取新浪網導航頁所有大類、小類、小類裏的子鏈接、以及子鏈接頁面的新聞內容,最後保存到本地。 大類小類如下圖所示: 點擊國內這個小類,進入頁面後效果如下圖(部分截圖)

教你分分鐘學會用python爬蟲框架Scrapy取你想要的內容

python 爬蟲 Scrapy python爬蟲 教你分分鐘學會用python爬蟲框架Scrapy爬取心目中的女神 python爬蟲學習課程,下載地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 課程代碼原件:課程視頻:教你分分鐘學會用py

精通Python爬蟲框架Scrapy PDF下載

Scrapy是一個開源的Python爬蟲框架,可以用來輕鬆提取從頁面資料。Scrapy帶有豐富的特性,可通過簡單的編碼或配置來訪問,從而可以節省開發人員數週的開發時間,並高效地提取所需資料。Scrapy有一個高度活躍且迅速增長的社群,而且已經成為黑客、創業者和Web爬取專家的首*框架。&nbs

python 爬蟲框架 scrapy 的目錄結構

First: scrapy 框架的專案目錄結構: Second:scrapy.cfg檔案:主要是爬蟲專案的配置檔案 hexunpjt/hexunpjt/__init__.py 檔案:專案的初始化檔案,主要寫的是一些專案初始化資訊。 hexunpjt/hexunpjt/items

Python 爬蟲框架 Scrapy 在 Windows10 系統環境下的安裝和配置

環境: Windows10 系統、python3.4.3 版本 安裝 Scrapy : 使用 pip 安裝 Scrapy,在命令列視窗中輸入命令 “pip install Scrapy”,若不報錯即可安裝成功。 注意:可在命令列視窗中輸入命令“pip -h”測試 pip 模組是否已安

11月7日python爬蟲框架Scrapy基礎知識

爬蟲最好的方式: 下載一頁匹配一頁,以後可以使用多執行緒讓抓取頁面和儲存到資料庫分開進行 爬取動態網頁的兩種方式, 1.selenium模擬瀏覽器 2. 在F12的Network中抓包,使用json字串 執行爬蟲需要安裝win23 :  pip install pypiwin32

分享《精通Python爬蟲框架Scrapy》中文PDF+英文PDF+原始碼

下載:https://pan.baidu.com/s/13tFIFOhDM8PG9pFUuA8M2g 更多資料:http://blog.51cto.com/3215120 《精通Python爬蟲框架Scrapy》中文PDF+英文PDF+原始碼 中文版PDF,364頁,帶目錄和書籤,文字可以複製貼上,彩色

分享《精通Python爬蟲框架Scrapy》中文PDF+英文PDF+源代碼

其中 rap size href 代碼 mar ref png nag 下載:https://pan.baidu.com/s/13tFIFOhDM8PG9pFUuA8M2g 更多資料:http://blog.51cto.com/3215120 《精通Python爬蟲框架Sc

在linux和windows下安裝python爬蟲框架scrapy

一、在linux下安裝 1)先下python,2.7版本的; 2)再下pip.py檔案,然後執行:sudopythonget-pip.py 3)執行命令: pip install scrapy 二、在windows下安裝 非常的麻煩... 1)先下python,2.7版本

分享《精通Python爬蟲框架Scrapy》+PDF+源碼+迪米特裏奧斯+李斌

迪米特 pytho aid 源代碼 下載 51cto baidu mark roc 下載:https://pan.baidu.com/s/1-ruuQebCnyLVt5L8RATT-g 更多資料:http://blog.51cto.com/14087171 《精通Pytho

4-Python爬蟲框架-Scrapy

scrapy 爬蟲框架 框架 爬蟲框架 scrapy pyspider crawley scrapy框架介紹 https://doc.scrapy.org/en/latest/ http://scrapy-chs.readthe

Python爬蟲框架scrapy的用途及元件認識

Python爬蟲框架scrapy的用途及元件認識 今天簡述一下Scrapy框架的大致處理流程,以方便大家更好的理解Scrapy的執行過程. Scrapy是一個快速、高層次螢幕抓取和web抓取python爬蟲框架,主要用於抓取特定web站點的資訊並從頁面中提取結構化的資料。 由於Scr

Python爬蟲框架Scrapy介紹加實戰專案

Python爬蟲框架Scrapy介紹加實戰專案 Scrapy框架是非同步處理框架,可配置和可擴充套件程度非常高,是Python中使用最廣泛的爬蟲框架,這個框架非常的強大,幾乎能用來配合任何爬蟲專案。 專案要求:爬取騰訊招聘上的招聘資訊(連結: link.) 爬取資料要求:需要爬取,職