Linux云服務(wù)器下配置Scrapy并抓取數(shù)據(jù)

基礎(chǔ)裝備:

Linux云服務(wù)器(阿里云Ubuntu 16.04)媒佣;
??建立遠(yuǎn)程連接的軟件(這里用的是XShell);

友情鏈接:

Scrapy入門(mén)教程:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/tutorial.html
Scrapy-Github地址:https://github.com/scrapy/scrapy
XShell官網(wǎng)下載:http://www.netsarang.com/xshell_download.html
XShell百度下載:http://rj.baidu.com/soft/detail/15201.html?ald
ubuntu常用命令:http://www.reibang.com/p/1340bb38e4aa
tips: 連接到云服務(wù)器之后請(qǐng)先更新操作系統(tǒng)!!臂寝!


----------------------------------看完覺(jué)著有用的話幫忙點(diǎn)個(gè)贊哦~-----------------------------------------

目錄
  1. Ubuntu 16.04云服務(wù)器下Scrapy的配置
    • 使用ssh方法連接到服務(wù)器
    • 查看python版本
    • 用pip安裝virtualenv
    • 創(chuàng)建虛擬環(huán)境
    • pip安裝twisted
    • 其他相關(guān)軟件包安裝
    • 安裝cryptography
    • 安裝scrapy
  2. Scrapy抓取網(wǎng)頁(yè)源碼
    • 找到spiders文件夾
    • 本地編寫(xiě)spiders文件并上傳
    • 執(zhí)行文件
  3. Scrapy抓取多頁(yè)數(shù)據(jù)
    • 本地編寫(xiě)spiders文件
    • 上傳并執(zhí)行文件
  4. Scrapy抓取指定數(shù)據(jù)
    • 本地編寫(xiě)spiders文件
    • 上傳并執(zhí)行文件
  5. 總結(jié)

Ubuntu 16.04云服務(wù)器下Scrapy的配置


使用ssh方法連接到云服務(wù)器

xshell-new.PNG

新建-->輸入主機(jī)IP-->確定-->輸入用戶名和密碼-->連接成功-->進(jìn)入打算安裝scrapy的文件夾
如果不知道怎樣創(chuàng)建新用戶和進(jìn)入文件夾的請(qǐng)移步到Ubuntu常用命令整理
友情鏈接:xshell登陸詳解--騰訊云服務(wù)器+Ubuntu+Scrapy抓取網(wǎng)頁(yè)數(shù)據(jù)
注意:xshell輸入密碼會(huì)有對(duì)話框彈出;在linux系統(tǒng)中輸入密碼不會(huì)有顯示摊灭,輸入完后Enter即可咆贬。

查看python版本

00--py.PNG

python --version

--version用于查看版本

用pip安裝virtualenv

01--virtualenv.PNG

sudo pip install virtualenv
virtualenv --version

sudo命令必須在root權(quán)限用戶或者被賦予sudo權(quán)限的用戶執(zhí)行;
給普通用戶賦sudo權(quán)限

usermod -aG sudo username

virtualenv 簡(jiǎn)介

virtualenv 是一個(gè)創(chuàng)建隔絕的Python環(huán)境的工具帚呼。virtualenv創(chuàng)建一個(gè)包含所有必要的可執(zhí)行文件的文件夾掏缎,用來(lái)使用Python工程所需的包。

相關(guān)鏈接:
??http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/
??https://docs.python.org/3/library/venv.html

創(chuàng)建 venv 虛擬環(huán)境

02--venv.PNG

virtualenv venv
cd venv
ls
source bin/activate

virtualenv venv 將會(huì)在當(dāng)前的目錄中創(chuàng)建一個(gè)文件夾萝挤,包含了Python可執(zhí)行文件御毅,以及 pip 庫(kù)的一份拷貝,這樣就能安裝其他包了怜珍。虛擬環(huán)境的名字(此例中是 venv )可以是任意的端蛆;若省略名字將會(huì)把文件均放在當(dāng)前目錄。
??其中酥泛,cd命令用于進(jìn)入指定目錄今豆;ls用于查看當(dāng)前目錄嫌拣;
??source bin/activate用于激活venv, 每次要開(kāi)始使用虛擬環(huán)境之前都需要激活。
??激活后呆躲,當(dāng)前虛擬環(huán)境的名字會(huì)顯示在提示符左側(cè)(比如說(shuō) (venv)你的電腦:你的工程 用戶名$)以顯示它是激活的异逐。從現(xiàn)在起,任何使用pip安裝的包將會(huì)放在 ``venv 文件夾中插掂,與全局安裝的Python隔絕開(kāi)灰瞻。

pip安裝twisted

03--twisted.PNG

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple twisted

Twisted是一個(gè)python編寫(xiě)的事件驅(qū)動(dòng)網(wǎng)絡(luò)引擎。支持許多常見(jiàn)的網(wǎng)絡(luò)協(xié)議辅甥,包括SMTP酝润,POP3,IMAP璃弄,SSHv2和DNS要销。


如果Twisted版本過(guò)高,要降包適配夏块。

相關(guān)鏈接:
??pip常用命令總結(jié):http://blog.csdn.net/ezreal_king/article/details/61474541
??twisted官網(wǎng):https://twistedmatrix.com/trac/
??twisted-gitbook:https://www.gitbook.com/book/likebeta/twisted-intro-cn/details

其它相關(guān)軟件包安裝

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

這里由于忘記sudo apt-get update,出了一點(diǎn)點(diǎn)小問(wèn)題..

q1--unablelibssldev.PNG

所以千萬(wàn)要記得經(jīng)常給服務(wù)器update!!!

軟件包介紹:
build-essential: Informational list of build-essential packages
libssl-dev:是OpenSSL項(xiàng)目實(shí)施SSL和TLS加密協(xié)議的一部分疏咐,用于通過(guò)Internet進(jìn)行安全通信。
libffi-dev:外部函數(shù)接口庫(kù)(開(kāi)發(fā)文件)
python-dev:頭文件和Python的靜態(tài)庫(kù)(默認(rèn))

相關(guān)鏈接:
??libffi介紹:https://sourceware.org/libffi/

安裝cryptography

04--cryptography.PNG

pip install cryptography

cryptography[加密]是一種為Python開(kāi)發(fā)人員提供加密配方和原語(yǔ)的軟件包脐供。

cryptography includes both high level recipes, and low level interfaces to common cryptographic algorithms such as symmetric ciphers, message digests and key derivation functions.

來(lái)源:https://pypi.python.org/pypi/cryptography
相關(guān)鏈接:
cryptography開(kāi)發(fā)文檔:https://cryptography.io/en/latest/

安裝scrapy

06--quotes.PNG

pip install scrapy
scrapy --version
scrapy startproject quotes(工程名)

到這里浑塞,scrapy已經(jīng)成功安裝在了我們的Ubuntu云服務(wù)器上。
接下來(lái)政己,就可以開(kāi)始寫(xiě)代碼進(jìn)行數(shù)據(jù)爬取了缩举。

Scrapy抓取網(wǎng)頁(yè)源碼

------------------------------------以抓取quotes網(wǎng)站的名人名言為例------------------------

找到spiders文件夾

這里如果中斷了之前的連接,需要重新激活

激活并進(jìn)入虛擬環(huán)境
01--activate.PNG

cd /home/slx/venv //進(jìn)入venv虛擬環(huán)境的目錄
source bin/activate //激活

02--tree.PNG
cd slx_quotes                  //進(jìn)入venv下新建工程的目錄  
tree                           //查看當(dāng)前目錄  
(如果沒(méi)有安裝tree,輸入命令sudo apt-get install tree進(jìn)行安裝)  
cd slx_quotes/spiders          //進(jìn)入spiders目錄下  

目錄分析:

scrapy.cfg/
slx_quotes/
    __init__.py
    items.py
    middlewares.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
  • scrapy.cfg:項(xiàng)目配置文件
  • slx_quotes/:該項(xiàng)目的python模塊匹颤,之后在這里加入代碼
  • slx_quotes/items.py:項(xiàng)目中的item文件
  • slx_quotes/middlewares.py:spider中間件文件
  • slx_quotes/pipelines.py:項(xiàng)目管道組件文件
  • slx_quotes/settings.py:項(xiàng)目的設(shè)置文件
  • slx_quotes/spiders/:放置spider代碼的目錄

本地編寫(xiě)spider代碼并上傳

import scrapy

class QuotesSpider(scrapy.Spider):
        name = "slx_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 = 'slx-quotes-%s.html' % page
            with open(filename, 'wb') as f:
                f.write(response.body)
                self.log('Saved file %s' % filename)
  • 三個(gè)屬性:
    • name: 用于區(qū)別不同的spider.必須是唯一的仅孩,不能為不同的spider設(shè)定相同的名字。
    • start_urls:包含了Spider在啟動(dòng)時(shí)進(jìn)行爬取的url列表印蓖。
    • parse() :是spider的一個(gè)方法辽慕。 被調(diào)用時(shí),每個(gè)初始URL完成下載后生成的 Response 對(duì)象將會(huì)作為唯一的參數(shù)傳遞給該函數(shù)赦肃。 該方法負(fù)責(zé)解析返回的數(shù)據(jù)(response data)溅蛉,提取數(shù)據(jù)(生成item)以及生成需要進(jìn)一步處理的URL的 Request 對(duì)象。
      page通過(guò)response.url取到了頁(yè)碼數(shù)他宛;
      filename是保存的文件名船侧;
      self.log在控制臺(tái)打印出日志信息,顯示文件名厅各。
  • %s介紹:
    python字符串格式化符號(hào):
    符 號(hào) 描述
    %c 格式化字符及其ASCII碼
    %s 格式化字符串
    %d 格式化整數(shù)
    %u 格式化無(wú)符號(hào)整型
    %o 格式化無(wú)符號(hào)八進(jìn)制數(shù)
    %x 格式化無(wú)符號(hào)十六進(jìn)制數(shù)
    %X 格式化無(wú)符號(hào)十六進(jìn)制數(shù)(大寫(xiě))
    %f 格式化浮點(diǎn)數(shù)字镜撩,可指定小數(shù)點(diǎn)后的精度
    %e 用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù)
    %E 作用同%e,用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù)
    %g %f和%e的簡(jiǎn)寫(xiě)
    %G %f 和 %E 的簡(jiǎn)寫(xiě)
    %p 用十六進(jìn)制數(shù)格式化變量的地址
    來(lái)源:http://www.runoob.com/python/python-strings.html
    參考:http://www.cnblogs.com/wilber2013/p/4641616.html

把寫(xiě)好的py文件拖進(jìn)spiders目錄下

03--rz.PNG

執(zhí)行文件

04-scrapy.PNG
04-scrapy2.PNG

scrapy crawl slx_quotes
find / -name slx-quotes-1.html
sz

執(zhí)行爬蟲(chóng)后队塘,我們得到了html文件袁梗,找到它并且保存到本地(這里我用的lrzsz方法執(zhí)行sz命令進(jìn)行保存)


得到html文件

05--scrapyhtml.PNG

我們也可以用chrome的開(kāi)發(fā)者工具分析網(wǎng)頁(yè)的格式

05--chrome.PNG

---------------這里是MobaXterm上傳下載及查找文件的方法-----
如果找不到home文件夾的話宜鸯,它可能藏在這里了...

找到home1
找到home2

在這里上傳下載

左上角有上傳下載的按鈕,點(diǎn)擊即可遮怜。也可以把文件直接拖進(jìn)來(lái)淋袖。
標(biāo)題從左到右:文件名;大芯饬骸即碗;最后一次修改時(shí)間;所有者陌凳;所屬組拜姿;權(quán)限
如果遇到了Permission denied,可能是由于權(quán)限不夠冯遂,修改文件權(quán)限方法

Scrapy爬取多頁(yè)Json數(shù)據(jù)

本地編寫(xiě)Spiders文件

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "slx_quotes_spider"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]


    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text':quote.css('span.text::text').extract_first(),
                'author':quote.css('small.author::text').extract_first(),
                'tags':quote.css('div.tags a.tag::text').extract(),
            }

            next_page = response.css('li.next a::attr(href)').extract_first()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page,callback = self.parse)

(如果遇到not found或者unexpected indent,可能是空格或縮進(jìn)有問(wèn)題谒获。這里的代碼縮進(jìn)我又進(jìn)行了對(duì)照完善蛤肌,現(xiàn)在的縮進(jìn)是沒(méi)有問(wèn)題的,可以對(duì)照檢查縮進(jìn))

上傳文件并執(zhí)行

具體操作方法和之前一樣批狱;
這次把爬取的數(shù)據(jù)保存為json文件

scrapy crawl slx_quotes_spider -o slx_05011447.json

第一個(gè)參數(shù)與代碼中name相同裸准;name在每個(gè)爬蟲(chóng)中都是唯一標(biāo)識(shí)的;不同的爬蟲(chóng)應(yīng)該取不同的name.
第二個(gè)參數(shù)是你想要保存的json文件名

Scrapy抓取指定數(shù)據(jù)

本地編寫(xiě)spiders文件

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "tag_ys"
    start_urls = [
        'http://quotes.toscrape.com',
    ]

    def parse(self, response):  
            for href in response.css('span.tag-item a::attr(href)'): 
                    url =response.urljoin(href.extract())
            print href.extract() 
                    yield scrapy.Request(url, callback=self.parse1)  

    def parse1(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text':quote.css('span.text::text').extract_first(),
                'author':quote.css('small.author::text').extract_first(),
                'tags':quote.css('div.tags a.tag::text').extract(),
            }

            next_page = response.css('li.next a::attr(href)').extract_first()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page,callback = self.parse1)

這段代碼主要是用于爬取quotes.toscrape.com網(wǎng)頁(yè)中熱門(mén)標(biāo)簽下的名人名言赔硫,通過(guò)抓取當(dāng)前頁(yè)面的熱門(mén)標(biāo)簽的url地址炒俱,鏈接到對(duì)應(yīng)的頁(yè)面再次進(jìn)行數(shù)據(jù)抓取。

上傳并執(zhí)行文件

scrapy crawl tag_ys -o tag_ys.json

抓取json數(shù)據(jù)結(jié)果如下:

tag_ys.PNG

如果需要xml數(shù)據(jù)爪膊,可用json轉(zhuǎn)xml在線工具進(jìn)行轉(zhuǎn)換
當(dāng)然权悟,也可以自己用java造輪子自行轉(zhuǎn)換

總結(jié)

通過(guò)幾天的學(xué)習(xí)與整理,我對(duì)scrapy框架有了更深刻的理解和認(rèn)識(shí)推盛,也在scrapy安裝過(guò)程中鞏固了ubuntu基礎(chǔ)知識(shí)峦阁。在學(xué)習(xí)的過(guò)程中,通過(guò)發(fā)現(xiàn)問(wèn)題與解決問(wèn)題耘成,逐漸完善自己的知識(shí)體系榔昔。

主要用到的知識(shí)點(diǎn)有:

  • Ubuntu基礎(chǔ)知識(shí);
  • python基礎(chǔ)知識(shí)瘪菌;
  • scrapy基礎(chǔ)撒会;
  • css選擇器;
  • xpath選擇器师妙;
  • 正則表達(dá)式

我的其他文章:
robots.txt學(xué)習(xí)筆記----以亞馬遜&Github為例
Ubuntu 常用命令整理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诵肛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子默穴,更是在濱河造成了極大的恐慌曾掂,老刑警劉巖惫谤,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異珠洗,居然都是意外死亡溜歪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)许蓖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蝴猪,“玉大人,你說(shuō)我怎么就攤上這事膊爪∽在澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵米酬,是天一觀的道長(zhǎng)沛豌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赃额,這世上最難降的妖魔是什么加派? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮跳芳,結(jié)果婚禮上芍锦,老公的妹妹穿的比我還像新娘。我一直安慰自己飞盆,他們只是感情好娄琉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吓歇,像睡著了一般孽水。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上城看,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天匈棘,我揣著相機(jī)與錄音,去河邊找鬼析命。 笑死主卫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹃愤。 我是一名探鬼主播簇搅,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼软吐!你這毒婦竟也來(lái)了瘩将?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姿现,沒(méi)想到半個(gè)月后肠仪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡备典,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年异旧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片提佣。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吮蛹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拌屏,到底是詐尸還是另有隱情潮针,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布倚喂,位于F島的核電站每篷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏端圈。R本人自食惡果不足惜焦读,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枫笛。 院中可真熱鬧,春花似錦刚照、人聲如沸刑巧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啊楚。三九已至,卻和暖如春浑彰,著一層夾襖步出監(jiān)牢的瞬間恭理,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工郭变, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颜价,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓诉濒,卻偏偏與公主長(zhǎng)得像周伦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子未荒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容