scrapy基本使用(一)

scrapy基本使用(一)

參考文檔:Scrapy入門教程 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.htmlhtml

scrapy基本使用(二)  http://www.cnblogs.com/zhaijiahui/p/6984640.htmlpython

 

一、 安裝

python3.5 按照官網大寫的安不上,要是小寫的才能安上網絡

pip install scrapy

理論上若是報錯,再看幾遍就行了,至少我是這樣,多是網絡問題吧。框架

若是出現了這個報錯,是twisted的安裝問題。dom

  building 'twisted.test.raiser' extension
   error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

解決方案:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下載twisted對應版本的whl文件(如個人Twisted‑17.5.0‑cp36‑cp36m‑win_amd64.whl),cp後面是python版本,amd64表明64位,運行命令:scrapy

pip install C:\Users\CR\Downloads\Twisted-17.5.0-cp36-cp36m-win_amd64.whl

其中install後面爲下載的whl文件的完整路徑名
安裝完成後,再次運行:ide

pip install Scrapy

便可成功。函數

 

二、 基礎操做

1) 建立項目ui

這是第一步,由於咱們要使用人家搭好的框架,這步就是生成框架。編碼

scrapy startproject tutorial

執行成功會在當前目錄生成一個文件夾。

 

2) 文件夾裏的內容

官網說的很詳細了,這裏引用官網,我根據本身淺薄的知識理解一下。

scrapy.cfg: 項目的配置文件

tutorial/: 該項目的python模塊。以後您將在此加入代碼。(這纔是核心呀。。)

tutorial/items.py: 項目中的item文件.(這是建立容器的地方,爬取的信息分別放到不一樣容器裏)

tutorial/pipelines.py: 項目中的pipelines文件.

tutorial/settings.py: 項目的設置文件.(我用到的設置一下基礎參數,好比加個文件頭,設置一個編碼)

tutorial/spiders/: 放置spider代碼的目錄. (放爬蟲的地方)

 

3) 定義容器(items.py)

我我的認爲,容器不用一開始就定好,應該是一點一點加的,可是官網就這個順序。。

修改items.py

import scrapy

class DmozItem(scrapy.Item): #建立一個類,繼承item類,就是繼承人家寫好的容器嘛
    title = scrapy.Field() # 取哪些內容,就建立哪些容器
    link = scrapy.Field()
    desc = scrapy.Field()

 

三、 爬蟲的編寫

例子:

import scrapy

class DmozSpider(scrapy.Spider): # 繼承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):
        filename = response.url.split("/")[-2] # 獲取url,用」/」分段,獲去倒數第二個字段
        with open(filename, 'wb') as f:
            f.write(response.body) # 把訪問的獲得的網頁源碼寫入文件

 

這裏須要重點說一下parse方法

被調用時,每一個初始URL完成下載後生成的 Response 對象將會做爲惟一的參數傳遞給該函數。

該方法負責解析返回的數據(response data),提取數據(生成item)以及生成須要進一步處理的URL的 Request 對象。

 

簡單說就是用來編寫爬蟲的主體,response就是網頁源碼。

 

四、 啓動爬蟲

一條命令:

 

scrapy crawl dmoz

 

執行爬蟲的時候發生了什麼?

 

Scrapy爲Spider的 start_urls 屬性中的每一個URL建立了 scrapy.Request 對象,並將 parse 方法做爲回調函數(callback)賦值給了Request。

例:

yield scrapy.Request(self.url + nextLink, callback=self.parse)

 

Request對象通過調度,執行生成 scrapy.http.Response 對象並送回給spider parse() 方法。

 

這裏咱們瞭解到請求連接的改變是靠回調函數實現的。

相關文章
相關標籤/搜索