工具/原料:
阿里云服務(wù)器、MobaXterm_v9.4/Xshell
實(shí)驗(yàn)?zāi)康模?/h5>
了解云服務(wù)器蒂阱、搭建虛擬環(huán)境盏阶、學(xué)習(xí)用Scrapy采集數(shù)據(jù)
主要內(nèi)容:
- 搭建云服務(wù)器
- 使用遠(yuǎn)程終端軟件連接到服務(wù)器
- 建立用戶組
- 進(jìn)入個(gè)人用戶搭建虛擬環(huán)境
- 創(chuàng)建數(shù)據(jù)采集項(xiàng)目
- 定義spider(在本地用文本編輯器編輯)并上傳到個(gè)人用戶文件夾中
- 執(zhí)行爬蟲
- 保存數(shù)據(jù)
- 數(shù)據(jù)格式轉(zhuǎn)換
在搭建云服務(wù)器的時(shí)候我們是小組一起做的亮蒋,選擇阿里云有兩個(gè)原因,一個(gè)是老師用的是阿里云懂傀,選擇這個(gè)可以避免在實(shí)驗(yàn)過程中出現(xiàn)不知道怎么解決的問題;另一個(gè)原因是聽其他人說阿里云對(duì)于學(xué)生有優(yōu)惠價(jià)格蜡感,其優(yōu)惠價(jià)格對(duì)于學(xué)生來說也比較能夠接受蹬蚁。另外恃泪,需要特別注意的是,一定要選好操作系統(tǒng)犀斋。我們當(dāng)時(shí)忽略了我們買的云服務(wù)器自帶的操作系統(tǒng)是CentOS 6.8 64位:
但是老師給的范例都是在Ubuntu的操作系統(tǒng)下進(jìn)行的贝乎,所以在剛開始搭環(huán)境的時(shí)候怎么做怎么不對(duì),做了很多無用功叽粹,后來請(qǐng)教了大神才知道使我們的操作環(huán)境跟執(zhí)行的代碼是不匹配的览效。
在創(chuàng)建虛擬環(huán)境的過程中,發(fā)現(xiàn)使用老師給的遠(yuǎn)程終端軟件MobaXterm的Session一段時(shí)間不進(jìn)行操作球榆,就老是容易斷開連接朽肥,如下圖所示:
在搭環(huán)境的過程中斷開的話又得重新連接,然后重新輸入命令持钉,所以在搭環(huán)境的過程中動(dòng)作一定要快衡招。
本來打算復(fù)制里面的文字去百度查一查有沒有什么能夠解決這種問題的,結(jié)果點(diǎn)擊Ctrl+C就關(guān)掉了搭環(huán)境的窗口每强,當(dāng)時(shí)還完全不知道發(fā)生了什么始腾,后來查資料才知道Ctrl+C表示強(qiáng)制停止當(dāng)前程序,事實(shí)告訴我們:不是什么都可以用Ctrl+C進(jìn)行復(fù)制的空执!Ctrl+C不一定就是復(fù)制的快捷鍵浪箭,這也告訴了我們生活中的一個(gè)小常識(shí),那就是不是所有東西都是一成不變的辨绊。奶栖。。所以本來想要搭建環(huán)境的過程圖都截下來门坷,現(xiàn)在都被關(guān)掉了宣鄙。。默蚌。所幸在強(qiáng)制關(guān)閉之前我截過一張圖:
MobaXterm的Session真的一直斷一直斷冻晤,一退出界面查找資料的功夫就又?jǐn)嚅_連接了,實(shí)在是太麻煩了绸吸,所以經(jīng)同學(xué)建議鼻弧,重新下載了一個(gè)遠(yuǎn)程終端軟件:Xshell。在使用的過程中發(fā)現(xiàn)了MobaXterm和Xshell各自的優(yōu)缺點(diǎn)锦茁,由于一開始就是用的是MobaXterm攘轩,所以有可能是因?yàn)橄热霝橹鞯脑颍丝偸嵌虝r(shí)間不進(jìn)行操作就會(huì)斷開連接以外码俩,界面?zhèn)€人覺得比Xshell更直觀撑刺,而且可以自己打開文件夾直觀的查看到有哪些文件,不需要輸入指令去查看握玛,但是確實(shí)老是斷開連接這個(gè)問題太煩人够傍。
由于斷開了連接甫菠,所以我直接在Xshell中激活并進(jìn)入之前搭好的虛擬環(huán)境即可。
在創(chuàng)建采集數(shù)據(jù)項(xiàng)目的時(shí)候出現(xiàn)了一點(diǎn)小錯(cuò)誤:
查看代碼冕屯,發(fā)現(xiàn)是因?yàn)槲抑耙呀?jīng)建立過這個(gè)采集數(shù)據(jù)的項(xiàng)目并且將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)行查看了:
執(zhí)行爬蟲:
從代碼可知,執(zhí)行爬蟲之后安聘,我們得到了html文件:
找到并且保存:
但是在爬取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í)候遇到了問題痰洒,總是爬取不到數(shù)據(jù),我仔細(xì)對(duì)過代碼浴韭,詢問過同學(xué)丘喻,也讓同學(xué)幫忙檢查了是不是哪里出錯(cuò)了,但是都沒找出來原因是什么念颈。
如圖所示泉粉,在保存json文件的時(shí)候,一直都處于文件傳輸狀態(tài)中榴芳,傳輸?shù)拇笮★@示的是0kb嗡靡,說明并沒有爬取到任何數(shù)據(jù)。
之后窟感,我就重新創(chuàng)建了一個(gè)數(shù)據(jù)采集項(xiàng)目讨彼,然后將本地編寫的Spiders文件上傳到相應(yīng)的文件夾中,最后執(zhí)行竟然就成功了:
并且成功的爬取到了數(shù)據(jù)并且保存成了json文件:
最后柿祈,將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)知識(shí)