Python爬蟲之Scrapy框架入門1

環(huán)境搭建

在開始搭建scrapy爬蟲的開發(fā)環(huán)境之前,建議已經安裝Anaconda這個python發(fā)行版本左电,這個可以讓以后的開發(fā)過程中,安裝其他的模塊環(huán)境不至于出現一堆的錯誤页响。

假定你安裝好了Anaconda,也配置好了相應的環(huán)境變量篓足,這是你可以用以下的命令安裝scrapy框架:

  1. 在終端執(zhí)行下面這條命令

conda install Scrapy

下面是安裝過程的截圖,是不是很簡單

安裝scrapy

2.通過python的包安裝和管理工具pip來安裝

pip install Scrapy

這樣拘泞,scrapy就安裝完成了纷纫, 不管通過哪種方式枕扫,是不是都很簡單陪腌!當然此處推薦使用第一種安裝方式,什么?诗鸭?你就要用第二種染簇,ok,ok强岸,你用好了锻弓,體驗一把安裝python模塊庫錯綜復雜,藕斷絲連蝌箍,欲罷不能青灼,讓人蛋疼依賴關系(有多疼?妓盲?疼到你懷疑你有一顆假的蛋杂拨,沒錯,一顆)悯衬,也是一種人生的歷練!!

環(huán)境安裝好了以后凝垛,下面就可以開始我們想入非非敦间,性奮不已的scrapy基礎之路了。
作為流程娜亿,下面請允許我從scrapy的官網借(程序員的事情不叫偷的)一些話來湊個字數

項目創(chuàng)建

在開始爬取之前丽已,您必須創(chuàng)建一個新的Scrapy項目(廢話,請忽略)
怎么創(chuàng)建項目暇唾?促脉?對,沒錯策州,就是這樣瘸味,打開終端:

scrapy新建項目

注意注意 項目取名字的時候,不要像我的這個取得這么見名知意够挂,萬一你的領導或同事沒有八年開發(fā)經驗和漢語八級旁仿,你可能會被打的

見名知意

項目創(chuàng)建完成,可以看到下面的項目目錄

項目結構

下面該寫爬蟲了孽糖?枯冈?no!办悟!在開始寫爬蟲之前還是來了解一下scrapy的工作流程尘奏!

scrapy工作流程圖

沒錯我又從網上偷來的這張圖

?病蛉?圖看不太懂炫加?我艸瑰煎,我就知道有人跟我一樣,沒關系俗孝,來來來,看看別人通俗形象的解釋:

引擎:Hi酒甸!Spider, 你要處理哪一個網站?

Spiders:我要處理xxoo.com

引擎:你把第一個需要的處理的URL給我吧赋铝。

Spiders:給你第一個URL是XXXXXXX.com

引擎:Hi插勤!調度器,我這有request你幫我排序入隊一下革骨。

調度器:好的农尖,正在處理你等一下。

引擎:Hi良哲!調度器卤橄,把你處理好的request給我,

調度器:給你臂外,這是我處理好的request

引擎:Hi窟扑!下載器,你按照下載中間件的設置幫我下載一下這個request

下載器:好的漏健!給你嚎货,這是下載好的東西。(如果失斈杞:不好意思殖属,這個request下載失敗,然后引擎告訴調度器瓦盛,這個request下載失敗了洗显,你記錄一下,我們待會兒再下載原环。)

引擎:Hi挠唆!Spiders,這是下載好的東西嘱吗,并且已經按照Spider中間件處理過了玄组,你處理一下(注意!這兒responses默認是交給def parse這個函數處理的)

Spiders:(處理完畢數據之后對于需要跟進的URL)谒麦,Hi俄讹!引擎,這是我需要跟進的URL绕德,將它的responses交給函數 def xxxx(self, responses)處理患膛。還有這是我獲取到的Item。

引擎:Hi 耻蛇!Item Pipeline 我這兒有個item你幫我處理一下踪蹬!調度器驹溃!這是我需要的URL你幫我處理下。然后從第四步開始循環(huán)延曙,直到獲取到你需要的信息,

注意亡哄!只有當調度器中不存在任何request了枝缔,整個程序才會停止,(也就是說蚊惯,對于下載失敗的URL愿卸,Scrapy會重新下載。)

以上就是Scrapy整個流程了截型。

注: 以上引用自博客http://cuiqingcai.com/3472.html

以上完成了對scrapy的工作流程的理解趴荸,下面開始進入正題,開始我們的小爬蟲宦焦,用于scrapy官網給出的例子中的domz網站已經永久關閉发钝,所以下面的例子,我們以http://quotes.toscrape.com/tag/humor/這個網站為例波闹。

Item編寫

觀察網頁的結構后酝豪,確定一下需要爬取的頁面和想要爬取的內容字段,比如精堕,你要要爬取番號孵淘,封面,還是種子呢歹篓?別激動瘫证,我們在這里只爬取上面的網站每個條目的標題鏈接庄撮,作者標簽四個字段背捌,

確定要爬取的字段以后,就可以開始爬蟲的編寫洞斯,在==items.py==文件中加入我們要爬取的字段载萌,如下圖所示:

item定義

爬蟲文件編寫

確定以及定義好了我們需要提取的字段,下面就該開始爬蟲的編寫了巡扇,在spiders文件夾下新建自己的爬蟲文件:

新建spider文件

對于這個文件里的幾行代碼扭仁,這里只簡單的解釋一下,詳細的介紹以后再說厅翔,畢竟這里只是入門嘛乖坠!

開始我們導入scrapy模塊(這行還看不懂的話)。刀闷。熊泵。仰迁。

我還能說什么

除了這個模塊,我們還需要導入之前編寫的item文件顽分。之后是定義了一個spider類徐许,該類繼承自scrapy.Spider,下面的name = 'PachongSpider'是爬蟲的名字卒蘸,這個名字是唯一的雌隅,因為在完成代碼后運行爬蟲要用到這個名字,start_urls 列表里存放要爬取的鏈接地址缸沃,scrapy會自動從這個列表取出地址進行爬取恰起,并將返回的response作為參數傳遞給self.parse,在self.parse里就可以從response解析出需要的數據字段(即item里定義的字段)趾牧。

關于數據的解析检盼,scrapy提供了多種方式,xpath翘单,css吨枉,re,都是可以的哄芜,這里先來試試xpath东羹,如果對xpath不是很熟悉,可以先看一下http://www.w3school.com.cn/xpath/index.asp忠烛,看了属提,還不會用?美尸?冤议?多試幾遍就會了,或者也可以借助強大的chrome瀏覽器

提取xpath

爬蟲的編寫如下:

#coding:utf-8

import scrapy
from pachong.items import PachongItem

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

    def parse(self, response):
        base_url = 'http://quotes.toscrape.com'
        item = PachongItem()
        divs = response.xpath('//div[@class="quote"]')
        for div in divs:
            item['name'] = div.xpath('span[@class="text"]/text()').extract()[0]
            item['url'] = base_url+div.xpath('span/a/@href').extract()[0]
            item['tags'] = div.xpath('div[@class="tags"]/a/text()').extract()
            item['author'] = div.xpath('span/small[@class="author"]/text()').extract()[0]
            print(item)
            yield item

數據持久化

最后我們將爬取的數據持久化到本地师坎,可以存儲在文件中恕酸,csv,json胯陋,當然也可以是數據庫蕊温,這里采用mongodb來存儲(關于python使用mongodb,請自行百度)遏乔,如同文章開始介紹的义矛,數據持久化需要在pipelines.py文件中進行,
一下開始編寫pipelines.py文件

import pymongo

class PachongPipeline(object):
    def __init__(self):
        self.client = pymongo.MongoClient('localhost', 27017)
        self.pchdb = self.client['pchdb']
        self.pchtab = self.pchdb['pchtab']

    def process_item(self, item, spider):
        self.pchtab.insert_one(dict(item))
        return item

首先導入mongodb的python依賴模塊盟萨,在pipelines.py初始化方法中凉翻,連接到mongodb數據庫,在process_item方法中向數據庫插入數據捻激。這個文件編寫完成制轰,需要在settings.py文件中配置該管道

ITEM_PIPELINES = {
   'pachong.pipelines.PachongPipeline': 1,
}

如果運行了程序前计,數據庫沒有數據,可能是沒有在settings里配置ITEM_PIPELINES垃杖。

下面就是運行腳本了男杈,打開終端,進入到爬蟲的根目錄(到達根目錄调俘,scrapy list命令查看爬蟲的列表就是前面所說的spider里面的name對應的值)伶棒,然后輸入scrapy crawl pachong,腳本運行完成可以在數據庫看到爬取到的數據了

爬取到的數據

最后說一下脉漏,每次都要打開終端輸入命令來運行腳本多少有些不便,可以在項目的根目錄下新建一個python文件輸入下面的代碼:

from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'pachong'])

execute方法的的參數list中的三個元素是不是很熟悉袖牙,沒錯侧巨,就是前面在終端輸入過的命令,第三個元素是根據你爬蟲的“name”來定的

至此一個簡單的爬蟲就完成了鞭达,至于怎么爬取有分頁的網頁司忱,怎么設置代理,應對反爬畴蹭,以及怎么爬取js動態(tài)加載的頁面坦仍,將會在后面的博客中講到。
最后是代碼地址:https://github.com/lexyhp/pachong

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末叨襟,一起剝皮案震驚了整個濱河市繁扎,隨后出現的幾起案子,更是在濱河造成了極大的恐慌糊闽,老刑警劉巖梳玫,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異右犹,居然都是意外死亡提澎,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門念链,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盼忌,“玉大人,你說我怎么就攤上這事掂墓∏矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵君编,是天一觀的道長服协。 經常有香客問我,道長啦粹,這世上最難降的妖魔是什么偿荷? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任窘游,我火速辦了婚禮,結果婚禮上跳纳,老公的妹妹穿的比我還像新娘忍饰。我一直安慰自己,他們只是感情好寺庄,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布艾蓝。 她就那樣靜靜地躺著,像睡著了一般斗塘。 火紅的嫁衣襯著肌膚如雪赢织。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天馍盟,我揣著相機與錄音于置,去河邊找鬼。 笑死贞岭,一個胖子當著我的面吹牛八毯,可吹牛的內容都是我干的。 我是一名探鬼主播瞄桨,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼话速,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芯侥?” 一聲冷哼從身側響起泊交,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柱查,沒想到半個月后活合,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡物赶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年白指,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酵紫。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡告嘲,死狀恐怖,靈堂內的尸體忽然破棺而出奖地,到底是詐尸還是另有隱情橄唬,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布参歹,位于F島的核電站仰楚,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜僧界,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一侨嘀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捂襟,春花似錦咬腕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宠漩,卻和暖如春举反,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扒吁。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工火鼻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘦陈。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓凝危,卻偏偏與公主長得像波俄,于是被迫代替她去往敵國和親晨逝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容