打開服務 mongod.exe --dbpath E:\Develop\mongodb_64\data\dbjavascript
在安裝和打開服務以前要建一個db 文件的存儲位置java
而後打開服務python
打開服務以後 打開圖形化界面鏈接 好像也沒什麼須要注意了linux
通俗來講, robots.txt 是遵循 Robot協議 的一個文件,它保存在網站的服務器中,它的做用是,告訴搜索引擎爬蟲,本網站哪些目錄下的網頁 不但願 你進行爬取收錄。在Scrapy啓動後,會在第一時間訪問網站的 robots.txt 文件,而後決定該網站的爬取範圍。web
固然,咱們並非在作搜索引擎,並且在某些狀況下咱們想要獲取的內容偏偏是被 robots.txt 所禁止訪問的。因此,某些時候,咱們就要將此配置項設置爲 False ,拒絕遵照 Robot協議redis
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。sql
Docker相似於虛擬機那種環境 http://get.daocloud.io/mongodb
Splash是一個javascript渲染服務。它是一個帶有HTTP API的輕量級Web瀏覽器,使用Twisted和QT5在Python 3中實現。QT反應器用於使服務徹底異步,容許經過QT主循環利用webkit併發。
一些Splash功能:chrome
何爲動態的頁面:數據改變吧docker
虛擬化 任務管理 CPU查看是否開啓
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
分佈式讓爬蟲的效率更高
linux 的安裝 操做系統的安裝(centos6)
VMware安裝好了以後,要先建立一個虛擬環境,分區磁盤運行內存啥的。而後才安裝操做系統, 對啊個人系統也放在這些分區中,這些硬件中
因此操做系統不該該包括這些的。本身不可能在配置這些硬件什麼之類的,否則就是寫死了
windou鏈接虛擬機 傳輸文件 Xshell Xftp 通常文件放在/OPT 可是我解壓文件以後,應該怎麼安裝呢
因此計算機也會有全局變量這種東西 環境變量也有全局的和局部的
克隆的時候也要注意硬件網卡的東西,克隆出來是同樣的可能會衝突。 硬件?TCP/IP嗎
那該怎麼辦呢 刪除網卡 vi ifcfg-eth0
而後是刪除硬件信息 70-persistent-net.rules 不對啊 把本身的網卡還有硬件信息都刪了,那本身怎麼辦
怎麼克隆呢:先拍快照 而後管理裏有克隆
而後發現用戶名是同樣的那要怎麼改呢?
cd /etc/sysconfig/
vi network
init 6 是重啓嗎
分佈式內容:
在虛擬機中裝了什麼,python3,scrapy以及它的環境,scrapy-redis 而他們是跑爬蟲程序的機器
windows是核心服務器須要裝redis服務器
而且,因爲scrapy-redis自身的隊列機制,slave獲取的連接不會相互衝突。這樣各個slave在完成抓取任務以後,再把獲取的結果彙總到服務器上
使用三臺機器,一臺是win10,兩臺是centos6,分別在兩臺機器上部署scrapy來進行分佈式抓取一個網站
win10的ip地址爲192.168.31.245,用來做爲redis的master端,centos的機器做爲slave
master的爬蟲運行時會把提取到的url封裝成request放到redis中的數據庫:「dmoz:requests」,而且從該數據庫中提取request後下載網頁,再把網頁的內容存放到redis的另外一個數據庫中「dmoz:items」
slave從master的redis中取出待抓取的request,下載完網頁以後就把網頁的內容發送回master的redis
重複上面的3和4,直到master的redis中的「dmoz:requests」數據庫爲空,再把master的redis中的「dmoz:items」數據庫寫入到mongodb中
master裏的reids還有一個數據「dmoz:dupefilter」是用來存儲抓取過的url的指紋(使用哈希函數將url運算後的結果),是防止重複抓取的
這些數據庫:mongo,redis,Mysql 在python鏈接他們的時候,他們都要的打開服務,都是獨立的軟件,如何進行通訊呢?
就經過這個服務的,應該會有端口之類的 設計這些東西可能都是基於Linux系統吧,都沒有圖形化界面 也沒有像qq那樣安裝的簡單
因此他們也是提供的本身的圖形界面的 一個非關係型的數據庫 一個是key value形式的 有16個小數據庫的 一個關係型的大型數據庫
如今環境已經搭建好了,咱們的目標是什麼,併發嗎??? 按照上面的要求我必須在master中存request url 到redis中
而後在slave中獲取master中的url進行爬取
splash與request結合 :有什麼轉變嗎?只是在原基礎上加了docker 的訪問地址嗎?
動態爬取嗎??? 加載js嗎? 與js有關係嗎 不能爬取有js渲染的嗎? 加載東西也是須要時間的
原來是這個意思
什麼是lua代碼 不曉得 這個lua代碼應該是docker中的吧
splash 與scrapy結合:去上面的方式有什麼不一樣 python提供了一個類吧 SplashRequest
這個就是 當咱們發送請求的時候不用咱們原來的Spider.request 了 而是用SplashRequest這個請求了
須要在setting中修改東西的
有的頁面的不少部分都是用JS生成的,而對於用scrapy爬蟲來講就是一個很大的問題,由於scrapy沒有JS engine,因此爬取的都是靜態頁面,對於JS生成的動態頁面都沒法得到
官網http://splash.readthedocs.io/en/stable/
利用第三方中間件來提供JS渲染服務: scrapy-splash 等
利用webkit或者基於webkit庫
Splash是一個Javascript渲染服務。它是一個實現了HTTP API的輕量級瀏覽器,Splash是用Python實現的,同時使用Twisted和QT。Twisted(QT)用來讓服務具備異步處理能力,以發揮webkit的併發能力
pip install scrapy-splash
scrapy-splash使用的是Splash HTTP API, 因此須要一個splash instance,通常採用docker運行splash,因此須要安裝docker
selenium 是一套完整的web應用程序測試系統,包含了測試的錄製(selenium IDE),編寫及運行(Selenium Remote Control)和測試的並行處理(Selenium Grid)。Selenium的核心Selenium Core基於JsUnit,徹底由JavaScript編寫,所以能夠用於任何支持JavaScript的瀏覽器上。
selenium能夠模擬真實瀏覽器,自動化測試工具,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題。
selenium與scrapy結合:selenium能夠驅動瀏覽器,scrapy還有去重url的做用
去重是在調度器有記錄的,因此咱們還想用selenium發送請求的話能夠下載中間件下手
def start_request(self):
chrome = webdriver.Chrome()
chrome = get(url)
中間件有不少東西,但每次咱們用的時候都是看源碼。找到咱們想要的模塊
要使用middlewares就要在setting中開啓 要使用pipeline就要setting中開啓
雖然很好去關注下載中間件,可是這也是一個流程,咱們下載的東西,確定通過裏面的
開始 // 屬性用@符號,屬性名用雙引號 用中括號括起來 下一層用/ 隔開
還能夠拼接 | concat 有意思的string
' concat(//span[@class="total"]/text(),//span[@class="unit"]/span/text())'
爲何那個什麼ul下的li 索引不是從零開始的
若是推送過來的item不是字典的話 要記得用dict轉換
好像真的是,他會先訪問url 而後會在調度器中隊列排序
scrapy-redis 這個也要安裝的 在redis中就會生成字段 爲何redis不要鏈接呢