Scrapy采集名人名言實驗報告

工具/原料:

阿里云服務(wù)器、MobaXterm_v9.4/Xshell

實驗?zāi)康模?/h5>

了解云服務(wù)器、搭建虛擬環(huán)境、學(xué)習(xí)用Scrapy采集數(shù)據(jù)

主要內(nèi)容:
  1. 搭建云服務(wù)器
  2. 使用遠(yuǎn)程終端軟件連接到服務(wù)器
  3. 建立用戶組
  4. 進(jìn)入個人用戶搭建虛擬環(huán)境
  5. 創(chuàng)建數(shù)據(jù)采集項目
  6. 定義spider(在本地用文本編輯器編輯)并上傳到個人用戶文件夾中
  7. 執(zhí)行爬蟲
  8. 保存數(shù)據(jù)
  9. 數(shù)據(jù)格式轉(zhuǎn)換

在搭建云服務(wù)器的時候我們是小組一起做的,選擇阿里云有兩個原因,一個是老師用的是阿里云,選擇這個可以避免在實驗過程中出現(xiàn)不知道怎么解決的問題;另一個原因是聽其他人說阿里云對于學(xué)生有優(yōu)惠價格,其優(yōu)惠價格對于學(xué)生來說也比較能夠接受。另外,需要特別注意的是,一定要選好操作系統(tǒng)。我們當(dāng)時忽略了我們買的云服務(wù)器自帶的操作系統(tǒng)是CentOS 6.8 64位:


操作系統(tǒng).png

但是老師給的范例都是在Ubuntu的操作系統(tǒng)下進(jìn)行的,所以在剛開始搭環(huán)境的時候怎么做怎么不對,做了很多無用功,后來請教了大神才知道使我們的操作環(huán)境跟執(zhí)行的代碼是不匹配的。
在創(chuàng)建虛擬環(huán)境的過程中,發(fā)現(xiàn)使用老師給的遠(yuǎn)程終端軟件MobaXterm的Session一段時間不進(jìn)行操作,就老是容易斷開連接,如下圖所示:


1.png

在搭環(huán)境的過程中斷開的話又得重新連接,然后重新輸入命令,所以在搭環(huán)境的過程中動作一定要快。
本來打算復(fù)制里面的文字去百度查一查有沒有什么能夠解決這種問題的,結(jié)果點擊Ctrl+C就關(guān)掉了搭環(huán)境的窗口,當(dāng)時還完全不知道發(fā)生了什么,后來查資料才知道Ctrl+C表示強制停止當(dāng)前程序,事實告訴我們:不是什么都可以用Ctrl+C進(jìn)行復(fù)制的!Ctrl+C不一定就是復(fù)制的快捷鍵,這也告訴了我們生活中的一個小常識,那就是不是所有東西都是一成不變的。。。所以本來想要搭建環(huán)境的過程圖都截下來,現(xiàn)在都被關(guān)掉了。。。所幸在強制關(guān)閉之前我截過一張圖:
2.png

MobaXterm的Session真的一直斷一直斷,一退出界面查找資料的功夫就又?jǐn)嚅_連接了,實在是太麻煩了,所以經(jīng)同學(xué)建議,重新下載了一個遠(yuǎn)程終端軟件:Xshell。在使用的過程中發(fā)現(xiàn)了MobaXterm和Xshell各自的優(yōu)缺點,由于一開始就是用的是MobaXterm,所以有可能是因為先入為主的原因,除了總是短時間不進(jìn)行操作就會斷開連接以外,界面?zhèn)€人覺得比Xshell更直觀,而且可以自己打開文件夾直觀的查看到有哪些文件,不需要輸入指令去查看,但是確實老是斷開連接這個問題太煩人。
由于斷開了連接,所以我直接在Xshell中激活并進(jìn)入之前搭好的虛擬環(huán)境即可。


3.png

在創(chuàng)建采集數(shù)據(jù)項目的時候出現(xiàn)了一點小錯誤:
4.png

查看代碼,發(fā)現(xiàn)是因為我之前已經(jīng)建立過這個采集數(shù)據(jù)的項目并且將py文件:
  import scrapy

  class QuotesSpider(scrapy.Spider):
    name = "hzz_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 = 'hzz-quotes-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
            self.log('Saved file %s' % filename)

上傳到了spider文件夾中,所以可以直接進(jìn)行查看了:


5.png

執(zhí)行爬蟲:


6.png

從代碼可知,執(zhí)行爬蟲之后,我們得到了html文件:
7.png

找到并且保存:


8.png

但是在爬取json數(shù)據(jù):
import scrapy

class QuotesSpider(scrapy.Spider):

name="quotes"
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)

的時候遇到了問題,總是爬取不到數(shù)據(jù),我仔細(xì)對過代碼,詢問過同學(xué),也讓同學(xué)幫忙檢查了是不是哪里出錯了,但是都沒找出來原因是什么。

9.png

如圖所示,在保存json文件的時候,一直都處于文件傳輸狀態(tài)中,傳輸?shù)拇笮★@示的是0kb,說明并沒有爬取到任何數(shù)據(jù)。
10.png

之后,我就重新創(chuàng)建了一個數(shù)據(jù)采集項目,然后將本地編寫的Spiders文件上傳到相應(yīng)的文件夾中,最后執(zhí)行竟然就成功了:
11.png

12.png

并且成功的爬取到了數(shù)據(jù)并且保存成了json文件:
json文件.png

最后,將json文件轉(zhuǎn)化為XML文件(JSON與XML互轉(zhuǎn)),然后進(jìn)行了一些修改:json文件轉(zhuǎn)換為XML文件

參考鏈接:
JSON與XML互轉(zhuǎn)
Linux云服務(wù)器下配置Scrapy并抓取數(shù)據(jù)
Scrapy相關(guān)知識

我的其他文章:網(wǎng)站robots.txt學(xué)習(xí)筆記——以豆瓣和淘寶為例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容