寫博客就和筆記一樣真的很有用,你可以隨時的翻閱。爬蟲的爬蟲原理與數據抓取、非結構化與結構化數據提取、動態HTML處理和簡單的圖像識別已經學完,就差整理博客了
開始學習scrapy了,所以重新建了個分類。
scrapy的下載到安裝,再到能夠成功運行就耗費了我三個小時的時間,為了防止以后忘記,記錄一下。
我用的是Python3.6. Windows 需要四步
1、pip3 install wheel
2、安裝Twisted
a. http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted, 下載:Twisted-17.9.0-cp36-cp36m-win_amd64.whl
b. 進入文件所在目錄
c. pip3 install Twisted-17.1.0-cp35-cp35m-win_amd64.whl
3、pip3 install scrapy
然后我打開cmd,輸入了scrapy, 出現:
scrapy startproject myspider -----------創建scrapy項目
cd myspider -----------進入myspider目錄
scrapy genspider baidu baidu.com ------------創建爬蟲文件
scrapy crawl baidu -------------運行文件
之后,就報錯了,說缺少一個模塊win32, 上網查說 windows上scrapy依賴pywin32,下載網址: https://sourceforge.net/projects/pywin32/files/
我下載了,在安裝的時候出現了:
上面說是沒注冊什么的,上網搜了一下解決方案,唉,自己沒看懂。痛心疾首,對我自己的智商感到捉急
4、在cmd中使用python -m pip install pypiwin32
這是我成功的方法,上網查之后,在https://stackoverflow.com/questions/4863056/how-to-install-pywin32-module-in-windows-7有這樣一段話:
每天一個小實例:爬視頻(其實找到了視頻的url鏈接,用urllib.request.urlretrieve(視頻url,存儲的路徑)就可以了。
我做的這個例子太簡單;用scrapy框架顯得復雜,,我只是下載了一頁,多頁的話循環url,主要是走一遍使用Scrapy的流程:

1 #第一 2 打開mySpider目錄下的items.py 3 4 # -*- coding: utf-8 -*- 5 6 # Define here the models for your scraped items 7 # 8 # See documentation in: 9 # https://doc.scrapy.org/en/latest/topics/items.html 10 11 import scrapy 12 13 '''Item 定義結構化數據字段,用來保存爬取到的數據,有點像Python中的dict,但是提供了一些額外的保護減少錯誤。 14 15 可以通過創建一個 scrapy.Item 類, 並且定義類型為 scrapy.Field的類屬性來定義一個Item(可以理解成類似於ORM的映射關系)。''' 16 class MyspiderItem(scrapy.Item): 17 # define the fields for your item here like: 18 name = scrapy.Field() 19 mp4_url = scrapy.Field() 20 21 22 23 #第二,打開你創建的爬蟲文件,我的是baisi.py 24 25 # -*- coding: utf-8 -*- 26 import scrapy 27 from myspider.items import MyspiderItem 28 29 class BaisiSpider(scrapy.Spider): 30 name = 'baisi' 31 allowed_domains = ['http://www.budejie.com'] 32 start_urls = ['http://www.budejie.com/video/'] 33 34 def parse(self, response): 35 # 將我們得到的數據封裝到一個 `MyspiderItem` 對象 36 item = MyspiderItem() 37 38 #提取數據 39 mp4_links = response.xpath('//li[@class="j-r-list-tool-l-down f-tar j-down-video j-down-hide ipad-hide"]') 40 for mp4_link in mp4_links: 41 name = mp4_link.xpath('./@data-text')[0].extract() 42 video = mp4_link.xpath('./a/@href')[0].extract() 43 #判斷是否有MP4——url鏈接,有的保存 44 if video: 45 item['name'] = name 46 item['mp4_url'] = video 47 # 將獲取的數據交給pipelines 48 yield item 49 50 51 52 53 54 #第三 打開pipelines.py文件 55 56 # -*- coding: utf-8 -*- 57 58 # Define your item pipelines here 59 # 60 # Don't forget to add your pipeline to the ITEM_PIPELINES setting 61 # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html 62 import urllib.request 63 import os 64 class MyspiderPipeline(object): 65 def process_item(self, item, spider): 66 #文件名 67 file_name = "%s.mp4" % item['name'] 68 #文件保存路徑 69 file_path = os.path.join("F:\\myspider\\myspider\\video", file_name) 70 urllib.request.urlretrieve(item['mp4_url'],file_path) 71 return item 72 73 74 第四,執行scrapy crawl baisi
執行結果:
Scrapy 框架
- Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用途非常廣泛。
- 框架的力量,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便。
- Scrapy 使用了 Twisted
['twɪstɪd]
(其主要對手是Tornado)異步網絡框架來處理網絡通訊,可以加快我們的下載速度,不用自己去實現異步框架,並且包含了各種中間件接口,可以靈活的完成各種需求。 -
Scrapy框架官方網址:http://doc.scrapy.org/en/latest
Scrapy中文維護站點:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html
Scrapy架構圖(綠線是數據流向):
-
Scrapy Engine(引擎)
: 負責Spider
、ItemPipeline
、Downloader
、Scheduler
中間的通訊,信號、數據傳遞等。 -
Scheduler(調度器)
: 它負責接受引擎
發送過來的Request請求,並按照一定的方式進行整理排列,入隊,當引擎
需要時,交還給引擎
。 -
Downloader(下載器)
:負責下載Scrapy Engine(引擎)
發送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎)
,由引擎
交給Spider
來處理, -
Spider(爬蟲)
:它負責處理所有Responses,從中分析提取數據,獲取Item字段需要的數據,並將需要跟進的URL提交給引擎
,再次進入Scheduler(調度器)
, -
Item Pipeline(管道)
:它負責處理Spider
中獲取到的Item,並進行進行后期處理(詳細分析、過濾、存儲等)的地方. -
Downloader Middlewares(下載中間件)
:你可以當作是一個可以自定義擴展下載功能的組件。 -
Spider Middlewares(Spider中間件)
:你可以理解為是一個可以自定擴展和操作引擎
和Spider
中間通信
的功能組件(比如進入Spider
的Responses;和從Spider
出去的Requests)
scrapy運行的流程大概是:
- 引擎從調度器中取出一個鏈接(URL)用於接下來的抓取。
- 引擎把URL封裝成一個請求(request)傳給下載器。
- 下載器把資源下載下來,並封裝成應答包(response)
- 爬蟲解析response
- 解析出實體(item),則交給實體管道進行進一步處理
- 解析出的是銜接(URL),則把URL交給調度器等待抓取
基本使用:
1.在命令行中輸入: scrapy startproject myspider -----------創建scrapy項目
自動創建目錄:
打開:myspider
文件說明:
- scrapy.cfg 項目的配置信息,主要為Scrapy命令行工具提供一個基礎的配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
- items.py 設置數據存儲模板,用於結構化數據,如:Django的Model
- pipelines 數據處理行為,如:一般結構化的數據持久化
- settings.py 配置文件,如:遞歸的層數、並發數,延遲下載等
- spiders 爬蟲目錄,如:創建文件,編寫爬蟲規則
2.
cd myspider -----------進入myspider目錄
scrapy genspider baidu baidu.com ------------創建爬蟲文件
注意:一般創建爬蟲文件時,以網站域名命名,文件會在spiders中,
3. 然后你就可以編寫代碼了
4. scrapy crawl baidu -------------運行文件
總的來說:
制作 Scrapy 爬蟲 一共需要4步:
- 新建項目 (scrapy startproject xxx):新建一個新的爬蟲項目
- 明確目標 (編寫items.py):明確你想要抓取的目標
- 制作爬蟲 (spiders/xxspider.py):制作爬蟲開始爬取網頁
- 存儲內容 (pipelines.py):設計管道存儲爬取內容