scrapy簡單入門 ---- 第5章節

1. 簡介

scrapy框架是一個大而全的爬蟲框架,有了scrapy框架,beautifulsoup4和requests模塊都用不上了,因爲scrapy框架包含了這些模塊。

2. 功能

使用twisted下載頁面、HTML解析對象、支持代理、延遲下載、去重深度和廣度等功能。

3. 整體架構

在這裏插入圖片描述

4. 組件執行流程

在這裏插入圖片描述
① 引擎找到要執行的爬蟲(scrapy crawl xxx會找到找到xxx爬蟲名),執行爬蟲的start_requests方法,並得到一個迭代器;
② 迭代器循環時會獲取request對象,而request對象中封裝了要訪問的url和回調函數;
③ 將所有request對象(任務)放到調度器中,用於以後被下載器下載;
④下載器去調度器中獲取要下載任務(就是request對象),下載完成後執行回調函數;
⑤ 回到spider的回調函數中[如果yield Request()是重新放到調度器中去,如果yield Item()對象會到pipeline]

5. http協議

對請求字符串進行規格化。分割字符串:\r\n;請求頭:host:www.xxx.com;請求體:三種格式的請求體,json、&符號和上傳文件三種請求體 ,注意json格式中的數據是沒有單引號的,用雙引號。

6. 響應與解析

響應:request.text;request.encoding;request.body;request.request:當前響應是由哪個請求發起,請求中封裝了要訪問的url以及下載完成後執行哪個函數。

解析:採用xpath,//:子子孫孫裏面找; /:找兒子;.//:當前往下找子子孫孫;//div[@屬性名=’’];//div/text:取文本;//div/@href:取屬性;extract():獲取所有結果;extract_first():獲取第一條結果。簡單的例子:

tag_list = response.xpath("//div[@href='x']/a")
for tag in tag_list:
   tag.xpath('.//p/text()').extract_first()

再次發請求要使用:

yield Request(url='xxx',callback=self.parse) # 只是把url和callback封裝在一起,沒有發起請求
7. 安裝

Windows系統中,安裝scrapy時,如果遇到Twisted模塊不能被安裝,就需要單獨下載該模塊的whell文件來安裝。下載python版本對應的Twisted:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下載後在確保已安裝whell模塊的前提下安裝scrapy,如果需要pywin32模塊,要先安裝該模塊再安裝scrapy。安裝Twisted的命令是:pip install Twisted‑19.7.0‑cp38‑cp38m‑win_amd64.whl。

注意:使用 pip3 install scrapy 是可以把所有依賴安裝成功的,也就是說Twisted模塊不再需要單獨安裝。另外,記得需要單獨安裝pywin32模塊。

Linux系統中正常安裝,scrapy框架依賴的所有模塊和組件都會被安裝。最好指定下國內的鏡像源,如阿里的:https://mirrors.aliyun.com/pypi/simple。

8. 項目的創建

例如這裏創建一個項目名稱爲maoyan_movie的項目:

(scrapy) thanlon@thanlon-master:~/projects/PycharmProjects$ scrapy startproject scrapy_pro

執行上面命令後,會自動創建一個scrapy_pro目錄,目錄中有以下目錄/文件:
在這裏插入圖片描述
目錄與文件介紹:crapy.cfg :是主配置文件(上線部署);spiders:爬蟲文件;items.py:持久化(寫在硬盤上、數據庫、redis);middlewares.py:中間件(當請求到來時統一處理);pipelines.py:持久化;ssettings.py:也是配置文件。

9. 應用的創建

需要進入項目目錄,然後執行應用的創建,例如創建爬取貓眼電影的應用:

(scrapy) thanlon@thanlon-master:~/projects/PycharmProjects$ cd scrapy_pro/
(scrapy) thanlon@thanlon-master:~/projects/PycharmProjects/scrapy_pro$ scrapy genspider maoyan maoyan.com

在這裏插入圖片描述
會生成一個maoyan.py的文件:

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

class MaoyanSpider(scrapy.Spider):
    name = 'maoyan'
    allowed_domains = ['maoyan.com']
    start_urls = ['http://maoyan.com/']

    def parse(self, response):
        pass
10. 應用的啓動

執行 scrapy crawl maoyan 即可啓動應用,開始爬取目標站點。默認情況下只能啓動一個爬蟲。 不需要日誌可以加上 --nolog參數。

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