python 爬蟲框架Scrapy 初步學習

一、初步使用scrapy

網上教程很多,不重複介紹了;

Scrapy官方網站
可以看下這篇

一些基本的scrapy命令
scrapy startproject preoject_name    // 創造一個scrapy 項目

然後進入目錄preoject_name(你剛創建的項目):

scrapy genspider Lushan "www.ym94.cn"

// 如果沒有修改模板 就是使用默認的模板,自動生成

scrapy list  //檢查當前scrapy 下的爬蟲

PS:在Pycharm 下編寫代碼 和最後cmd需要注意:
Pycharm 是總的目錄作爲你的根路徑,而cmd 是當前目錄作爲根路勁,所以爲了同步在Pycharm 中設置如下信息

找到剛纔建立的項目,設置爲當前根目錄。

直接運行會出現no module named ×××.items
    解決:
        1,找到你的scrapy項目上右鍵
        2.然後點擊make_directory as
        3.最後點擊sources root
        4.看到文件夾編程藍色就成功了

 

 

二、初步瞭解Scrap

下面這個圖解釋了全過程。

 

首先有Spiders 告訴Scheduler(任務調度)需要爬取的網址,然後requests請求,從網上獲得請求,然後返回給Spider

Spider數據初步處理後交給pipelines保存或者輸出等。(只是大概說了下流程,詳細的過程還請各位百度)

 

下面是我的一個小爬蟲項目

               

Spiders/Demo.py 就是Spider

其中這個函數就是頁面初始處理的函數,可以把獲得的url 重新入隊,等待再次爬起(深度爬取也可以設置)

class LushanSpider(scrapy.Spider):
    name = 'LuShan'   # 必需
    allowed_domains = ['www.hnuc.edu.cn']  # 必需
    url = 'http://www.****.***.cn/column/36/list_'  # 學術預告
    # 起始URL
    # offset = 1
    start_urls = ["http://****/column/36/index.shtml"]  # 開始爬取的頁面
    def parse(self, response):
        .....
        #  通過Response對象可以直接訪問的屬性有
        #		{headers,status, request, meta,meta
        #	即是屬性也是方法, url, body,以上可以直接獲取內容,
        #   還有一些方法比如text(),css(),xpath()
        .....
        # item 就是處理好的數據 使用這個會傳到piplines 再次處理
        item["link"] = str(response.url)   # item存數據  取數據一樣
        yield item
        .....
        # 下面這個是將請求再次入隊,交給nextparse 這個函數處理,
        #  nextparse這個函數的參數和parse一樣
        yield scrapy.Request(str(link), callback=self.nextparse)
        pass

 

items:這個文件是用來數據處理的模型(數據轉變成items的類型,然後交給處理函數)

class ScdemoItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()

    # 公告發布的信息
    luname = scrapy.Field()
    # 詳細鏈接
    link = scrapy.Field()
    # 發佈時間
    lutime = scrapy.Field()
    # 主講人
    man = scrapy.Field()
    # 講座時間
    time = scrapy.Field()
    # 講座地點
    place = scrapy.Field()
    def process_item(self, item, spider):
        # 參數裏面的item 就是在parse 裏面yield item的item
        # 一定要返回
        return item

最後要setting 中設置,這樣纔會把item生成的數據傳到pipeline:

ITEM_PIPELINES = {
    'ScDemo.pipelines.ScdemoPipeline': 300,
    # 前面是你項目路徑.piplines.你剛纔創建的pipelines類名:後面的數字代表優先級,越小優先級越高
}

setting.py 還有一些設置介紹:

ROBOTSTXT_OBEY :是否遵守協議,有些網址並不想讓別人爬取 , False:這種不推薦(非萬不得已),強行爬蟲容易封ip

報錯信息:
Error:
        URLWarning: allowed_domains accepts only domains, not URLs.

爬蟲裏面的allowed_domains設置有問題,僅僅報錯,只需要設置域名範圍就好了

 

這是我接觸爬蟲的第一個框架(可能以前爬取的數據都不多,最多也就2W個份,while 10min跑完也沒感覺多大)

然後保存到數據庫,但是問題也來了,如何異步到存儲數據,請看下篇博客:https://blog.csdn.net/qq_40590018/article/details/103473216

發佈了55 篇原創文章 · 獲贊 44 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章