每天10分鐘,解決一個研發問題。
如果你想了解我在做什麼,請看《做一個有產品思維的研發:課程大綱》傳送門:https://www.cnblogs.com/hunttown/p/10490965.html
今天我們說一下Scrapy爬蟲:
Scrapy 在 Python 2.7 和 Python 3.3 或者更高版本上執行,他是用純 Python 編寫的,並且依賴於一些關鍵的 Python 包(其中包括):
1、lxml ,一個高效的XML和HTML解析器
2、parsel , 一個基於 lxml 的 HTML / XML 資料提取庫
3、w3lib ,一個用於處理URL和網頁編碼的多用途助手
4、twisted, 一個非同步的網路框架
5、cryptography 和 pyOpenSSL ,以處理各種網路級安全需求
Scrapy 經過測試支援的最低版本為:
a. Twisted 14.0
b. lxml 3.4
c. pyOpenSSL 0.14
一、推薦使用Linux安裝,大家可以安裝一個虛擬機器來做
二、Lniux環境安裝完畢以後,還需要安裝pip,這個是下面要用到的命令
三、安裝依賴
[MyCentOS6 ~]$ yum install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
四、由於pyphon3在安裝pip的時候安裝好了,這裡我們直接安裝scrapy
[MyCentOs6 ~]$ pip install scrapy
五、安裝完以後還需要安裝一些將來要用到的軟體
六、建立一個爬蟲專案
[MyCentOs6 ~]$ scrapy startproject tutorial
然後在 tutorial / spiders 目錄下建立 quotes_spider.py 檔案:
import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): page = response.url.split("/")[-2] filename = 'quotes-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('Saved file %s' % filename)
上面的 Spider 繼承了 scrapy.Spider 並定義了一些屬性和方法:
a. name:標識爬蟲。它在專案中必須是唯一的,也就是說,您不能為不同的 Spider 設定相同的名稱。
b. start_requests():必須返回一個可迭代的 Requests(您可以返回一個 request 列表或寫一個生成器函式),Spider將開始抓取。後續請求將從這些初始請求中連續生成。
c. parse():被呼叫來處理 response 的方法, response 由每個 request 下載生成。 response 引數是一個 TextResponse 的例項,它儲存頁面內容,並具有更多有用的方法來處理它。
執行爬蟲:
[MyCentOS6 ~]$ scrapy crawl quotes
如果你想把資料儲存到一個檔案中:
[MySentOS6 ~]$ scrapy crawl quotes -o quotes.json
今日總結:
1. 最初的的方式是使用urllib2,讀取url解析html,然後透過正規表示式匹配出想要的資料。
2. 現在的Scrapy,Python開發的一個快速、高層次的web抓取框架,用於抓取web站點並從頁面中提取結構化的資料,Scrapy的用途非常廣泛。