python爬蟲的最佳實踐(八)--初探Scrapy

程序員可以讓步厂财,卻不可以退縮,可以羞澀痒给,卻不可以軟弱说墨,總之,程序員必須是勇敢的

本節(jié)目標

  1. 配置scrapy環(huán)境苍柏,創(chuàng)建第一個scrapy項目
  2. 了解scrapy項目結構尼斧。
  3. 使用scrapy成功編寫一個爬蟲。

小插曲

有人說试吁,virtualenv突颊、pip是pythonner的兩大神器。pip我們在之前的項目中用過很多次了潘悼,今天來告訴大家virtualenv怎么使用。

所謂virtualenv爬橡,你可以簡單的理解為創(chuàng)建一個虛擬的python環(huán)境治唤,這個python環(huán)境是和本機的其他python環(huán)境互不干擾的,所以隨你怎么玩~玩壞了刪除了重新創(chuàng)建就好了糙申。

首先宾添,打開pycharm。選擇file->Default Setting柜裸,如圖:

1.png

單擊左上角setting標準缕陕,選擇Create VirtualEnv,如圖:


2.png

給你的virtyalEnv起個名字疙挺,然后選擇基礎的python環(huán)境扛邑,記得勾選下面的Inhert global site-packages選項,這回復制你安裝的第三方庫到你的虛擬環(huán)境中铐然,就不用再安裝一次了蔬崩。

這樣,一個虛擬環(huán)境便創(chuàng)建好了搀暑,你到指定的位置可以看到一個虛擬環(huán)境的文件夾沥阳,進入可以看到一個完整的python環(huán)境,python的第三方庫都在Scripts文件夾下可以找到自点,如果要給虛擬環(huán)境安裝第三方庫桐罕,可以從pycharm安裝,也可以直接運行 虛擬環(huán)境根目錄\Scripts\pip.exe install packageName。好了這樣我們的虛擬環(huán)境變創(chuàng)建好了功炮。

安裝scrapy

建議用python2.x的版本安裝溅潜。
打開pycharm,選擇 file->Default Setting死宣,選中剛剛創(chuàng)建的虛擬環(huán)境伟恶,點擊+,在搜索框中輸入scrapy毅该。如圖:

3.png

點擊安裝等待安裝完畢即可博秫。

創(chuàng)建項目

首先把剛剛創(chuàng)建的虛擬環(huán)境的Scripts文件夾加入到環(huán)境變量中,然后運行scrapy startproject tutorial眶掌,執(zhí)行完畢后可以看到tutorial項目已經(jīng)被創(chuàng)建在根目錄下挡育,目錄結構如下:

4.png

下面來簡單介紹一下各個文件的作用:

  • scrapy.cfg:項目的配置文件
  • items.py:項目的items文件,用來定義數(shù)據(jù)結構
  • pipelines.py:項目的pipelines文件朴爬,用來處理數(shù)據(jù)
  • settings.py:項目的設置文件
  • spiders/:存儲爬蟲的目錄

接下來我們創(chuàng)建第一個scrapy爬蟲

第一個scrapy爬蟲

在spiders目錄下創(chuàng)建一個新的python文件命名為test.py即寒,然后代碼如下:

#coding:utf-8
import scrapy
from scrapy.spiders import BaseSpider
from bs4 import BeautifulSoup

class testSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://s.2.taobao.com/list/list.htm?spm=2007.1000337.0.0.RrSiSG&catid=50100398&st_trust=1&page=1&ist=0']

    def parse(self, response):
        for title in response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "item-title", " " ))]//a'):
            yield scrapy.Request('http:'+title.xpath('@href').extract()[0], self.detail)

    def detail(self, response):
        data = BeautifulSoup(response.body, 'lxml')
        area = data.select('#J_Property > h1')
        print area[0].get_text()

首先引入庫scrapy,緊接著引入庫beautifulsoup召噩,沒錯母赵,scrapy可以和beautifulsoup結合起來使用

name = 'test'定義了這個爬蟲的名稱,這個名稱必須是唯一的具滴,以便用來區(qū)分其他爬蟲凹嘲。
start_urls = ['https://s.2.taobao.com/list/list.htm?spm=2007.1000337.0.0.RrSiSG&catid=50100398&st_trust=1&page=1&ist=0']
定義了開始的url,這個和pyspider類似构韵,可以填入多個url周蹭。

def parse(self, response):
        for title in response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "item-title", " " ))]//a'):
            yield scrapy.Request('http:'+title.xpath('@href').extract()[0], self.detail)

parse這個函數(shù)是我們繼承的scrapy.Spiderclass里面內(nèi)置的函數(shù),我們對它進行重寫疲恢,當我們的spider開始運行的時候會首先請求start_urls里面的鏈接并調(diào)用parse函數(shù)凶朗,給其返回一個response對象。

response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "item-title", " " ))]//a')

上面這句是使用xpath定位標簽显拳,scrapy支持xpath棚愤,還記得上節(jié)介紹的infolite么,剛好可以結合起來使用杂数。如圖得到了我們要的title的xpath:

5.png

我們選擇咸魚網(wǎng)的列表的title遇八,然后創(chuàng)建一個yield迭代器去遍歷每個title里面的url,代碼如下:

yield scrapy.Request('http:'+title.xpath('@href').extract()[0], self.detail)

scrapy.Request函數(shù)第一個參數(shù)傳入url耍休,第二個參數(shù)傳入callback刃永。對于我們已經(jīng)取出來的title的a標簽,我們依然可以通過xpath取出里面的屬性title.xpath('@href')羊精,如果要取出文字斯够,則使用title.xpath('text()')囚玫。

接下來我們進入到detail函數(shù):

def detail(self, response):
        data = BeautifulSoup(response.body, 'lxml')
        area = data.select('#J_Property > h1')
        print area[0].get_text()

一如我們之前講解的,在這里读规,我們用beautifulsoup解析response.body抓督,然后通過csspath取出我們想要的信息。

至此束亏,我們第一個scrapy爬蟲就寫完了铃在,是不是比想象中的簡單呢?

寫在最后

今天碍遍,我們簡單介紹了scrapy并實現(xiàn)了一個scrapy爬蟲定铜,下一節(jié)是scrapy的進階篇,我們將介紹scrapy中items 與pipelines的用法怕敬。小伙伴們可以用scrapy把我們之前寫過的爬蟲再重新試試揣炕,看看效率如何~

有興趣的同學可以加群498945822一起交流學習哦~~
發(fā)現(xiàn)問題的同學歡迎指正,直接說就行东跪,不用留面子畸陡,博主臉皮厚!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虽填,一起剝皮案震驚了整個濱河市丁恭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斋日,老刑警劉巖牲览,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異桑驱,居然都是意外死亡,警方通過查閱死者的電腦和手機跛蛋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門熬的,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赊级,你說我怎么就攤上這事押框。” “怎么了理逊?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵橡伞,是天一觀的道長。 經(jīng)常有香客問我晋被,道長兑徘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任羡洛,我火速辦了婚禮挂脑,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己崭闲,他們只是感情好肋联,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刁俭,像睡著了一般橄仍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牍戚,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天侮繁,我揣著相機與錄音,去河邊找鬼翘魄。 笑死鼎天,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的暑竟。 我是一名探鬼主播斋射,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼但荤!你這毒婦竟也來了罗岖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腹躁,失蹤者是張志新(化名)和其女友劉穎桑包,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纺非,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡哑了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烧颖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弱左。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炕淮,靈堂內(nèi)的尸體忽然破棺而出拆火,到底是詐尸還是另有隱情,我是刑警寧澤涂圆,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布们镜,位于F島的核電站,受9級特大地震影響润歉,放射性物質發(fā)生泄漏模狭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一踩衩、第九天 我趴在偏房一處隱蔽的房頂上張望胞皱。 院中可真熱鬧邪意,春花似錦、人聲如沸反砌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宴树。三九已至策菜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酒贬,已是汗流浹背又憨。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锭吨,地道東北人蠢莺。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像零如,于是被迫代替她去往敵國和親躏将。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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