《Python網絡爬蟲與信息提取》第四周 網絡爬蟲之框架 學習筆記(二)Scrapy爬蟲基本使用

目錄

二、Scrapy爬蟲基本使用

1、Scrapy爬蟲的第一個實例

(1)演示HTML地址

(2)產生步驟

(3)小結

2、yield關鍵字的使用

(1)yield關鍵字

(2)實例

(3)爲何要有生成器?

3、Scrapy爬蟲的基本使用

(1)Scrapy爬蟲的使用步驟

(2)Scrapy爬蟲的數據類型

(3)Scrapy爬蟲提取信息的方法

(4)CSS Selector的基本使用


二、Scrapy爬蟲基本使用

1、Scrapy爬蟲的第一個實例

(1)演示HTML地址

演示HTML頁面地址:http://python123.io/ws/demo.html

文件名稱:demo.html。

(2)產生步驟

步驟1:建立一個Scrapy爬蟲工程

管理員權限啓動cmd。

輸入:

scrapy startproject python123demo

生成的工程目錄:

python123demo/
        scrapy.cfg
        python123demo/
                __init__.py
                items.py

                middlewares.py
                pipelines.py
                settings.py
                spiders/
                        __init__.py
                        __pycache__/

外層目錄
部署Scrapy爬蟲的配置文件
Scrapy框架的用戶自定義Python代碼
初始化腳本
Items代碼模板(繼承類)

Middlewares代碼模板(繼承類)
Pipelines代碼模板(繼承類)
Scrapy爬蟲的配置文件
Spiders代碼模板目錄(繼承類)
初始文件,無需修改
緩存目錄,無需修改

步驟2:在工程中產生一個Scrapy爬蟲

管理員權限啓動cmd。

輸入:

cd python123demo
scrapy genspider demo python123.io

該命令作用:生成一個名稱爲demo的spider;在spiders目錄下增加代碼文件demo.py。

該命令僅用於生成demo.py,該文件也可以手工生成。

demo.py文件:

# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/']

    def parse(self, response):
        pass
# parse()用於處理響應,解析內容形成字典,發現新的URL爬取請求。

步驟3:配置產生的spider爬蟲

配置:初始URL地址;獲取頁面後的解析方式。

# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    # allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']

    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)
# parse()用於處理響應,解析內容形成字典,發現新的URL爬取請求。

步驟4:運行爬蟲,獲取網頁

管理員權限啓動cmd。

輸入:

scrapy crawl demo

demo爬蟲被執行,捕獲頁面存儲在demo.html。

(3)小結

①回顧demo.py代碼:

import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    start_urls = ['http://python123.io/ws/demo.html']

    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)

②demo.py代碼的完整版本:

# demo.py代碼的完整版本
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'

    def start_requests(self):
        urls = [
                    'http://python123.io/ws/demo.html'
                ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)

③demo.py兩個等價版本的區別:

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

2、yield關鍵字的使用

(1)yield關鍵字

yield↔生成器。

生成器是一個不斷產生值的函數。

包含yield語句的函數是一個生成器。

生成器每一次產生一個值(yield語句),函數被凍結,被喚醒後再產生一個值。

(2)實例

①生成器寫法:

# 生成器寫法
def gen(n):
    for i in range(n):
        yield i ** 2


for i in gen(5):
    print(i, " ", end="")

②普通寫法:

# 普通寫法


def square(n):
    ls = [i ** 2 for i in range(n)]
    return ls


for i in square(5):
    print(i, " ", end="")

(3)爲何要有生成器?

生成器相比一次列出所有內容的優勢:更節省存儲空間;響應更加迅速;使用更靈活。

如果n=1M、10M、100M或更大呢?

# 爲何要有生成器?


def square(n):
    ls = [i ** 2 for i in range(n)]
    return ls


def gen(n):
    for i in range(n):
        yield i ** 2

3、Scrapy爬蟲的基本使用

(1)Scrapy爬蟲的使用步驟

步驟1:創建一個工程和Spider模板。

步驟2:編寫Spider。

步驟3:編寫Item Pipeline。

步驟4:優化配置策略。

(2)Scrapy爬蟲的數據類型

Request類;Response類;Item類。

①Request類:

class scrapy.http.Request()。

Request對象表示一個HTTP請求;由Spider生成,由Downloader執行。

屬性或方法 說明
.url Request對應的請求URL地址
.method 對應的請求方法,‘GET’ ‘POST’等
.headers 字典類型風格的請求頭
.body 請求內容主體,字符串類型
.meta 用戶添加的擴展信息,在Scrapy內部模塊間傳遞信息使用
.copy() 複製該請求

②Response類:

class scrapy.http.Response()。

Response對象表示一個HTTP響應;由Downloader生成,由Spider處理。

屬性或方法 說明
.url Response對應的URL地址
.status HTTP狀態碼,默認是200
.headers Response對應的頭部信息
.body Response對應的內容信息,字符串類型
.flags 一組標記
.request 產生Response類型對應的Requests對象
.copy() 複製該響應

③Item類:

class scrapy.item.Item()。

Item對象表示一個從HTML頁面中提取的信息內容;由Spider生成,由Item Pipeline處理;Item類似字典類型,可以按照字典類型操作。

(3)Scrapy爬蟲提取信息的方法

Scrapy爬蟲支持多種HTML信息提取方法。

①Beautiful Soup。

②lxml。

③re。

④XPath Selector。

⑤CSS Selector。

(4)CSS Selector的基本使用

使用格式:

<HTML>.css('a::attr(href)').extract()

①a:標籤名稱。

②href:標籤屬性。

CSS Selector由W3C組織維護並規範。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章