scrapy爬蟲框架(二):創(chuàng)建一個(gè)scrapy爬蟲

在創(chuàng)建新的scrapy爬蟲之前纽甘,我們需要先了解一下創(chuàng)建一個(gè)scrapy爬蟲的基本步驟

一玖雁、確定要爬取的數(shù)據(jù)

以爬取豆瓣電影數(shù)據(jù)為例:
每部電影所要爬取的信息有:

  • 片名:《頭號(hào)玩家》
  • 導(dǎo)演: 史蒂文·斯皮爾伯格
  • 編劇: 扎克·佩恩 / 恩斯特·克萊恩
  • 主演: 泰伊·謝里丹 / 奧利維亞·庫(kù)克 / 本·門德爾森 / 馬克·里朗斯 / 麗娜·維特 / 更多...
  • 類型: 動(dòng)作 / 科幻 / 冒險(xiǎn)

所以items文件的代碼如下:

#items.py

import scrapy

class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    movie_name = scrapy.Field()
    movie_dir = scrapy.Field()
    movie_editors = scrapy.Field()
    movie_actors = scrapy.Field()
    movie_type = scrapy.Field()


二、爬取所需的信息

確定了要爬取的信息后,就可以開始寫爬蟲的代碼了。

首先彼棍,我們創(chuàng)建一個(gè)爬蟲文件已添。

在命令行中輸入如下命令(必須在爬蟲項(xiàng)目的文件夾里):

scrapy genspider spidername "domain"
#spidername是要?jiǎng)?chuàng)建的爬蟲的名字,必須是唯一的滥酥,而且不能和爬蟲項(xiàng)目名相同
#domain是要爬取的網(wǎng)站的 host更舞,即你所要爬取的網(wǎng)站的域名,如:www.baidu.com

創(chuàng)建好爬蟲文件后,打開爬蟲項(xiàng)目下的spiders文件夾坎吻,用編輯器打開我們剛剛創(chuàng)建的爬蟲文件缆蝉。

文件里已經(jīng)定義好了start_urls,這是我們運(yùn)行爬蟲時(shí)要訪問(wèn)的鏈接瘦真。

注意這是一個(gè)列表刊头,可以放入多個(gè)url。

當(dāng)爬蟲運(yùn)行時(shí)就會(huì)一個(gè)一個(gè)地訪問(wèn) start_urls里的鏈接诸尽,然后將返回的響應(yīng)做為參數(shù)傳遞給 parse函數(shù)原杂。

在 parse函數(shù)里,我們可以來(lái)對(duì)網(wǎng)頁(yè)中的信息進(jìn)行提取您机。

示例只爬取一個(gè)頁(yè)面(頭號(hào)玩家的詳情頁(yè))穿肄,代碼如下:

# -*- coding: utf-8 -*-
#movieInfoSpider.py
import scrapy
#導(dǎo)入DouBanItem類
from douban.items import DoubanItem

class MovieinfoSpider(scrapy.Spider):
    name = 'movieInfo'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/subject/4920389/?from=showing']

    def parse(self, response):
        #創(chuàng)建DoubanItem類
        item = DoubanItem()

        item['movie_name'] = response.xpath('//title/text()').extract()[0]
        item['movie_dir'] = '導(dǎo)演:' + '/'.join(response.xpath('//div[@id="info"]/span[1]/span/a/text()').extract())
        item['movie_editors'] = '編劇:' + '/'.join(response.xpath('//div[@id="info"]/span[2]/span/a/text()').extract())
        item['movie_actors'] = '主演:' + '/'.join(response.xpath('//div[@id="info"]/span[3]/span/a/text()').extract())
        item['movie_type'] = '類型:' + '/'.join(response.xpath('//div[@id="info"]/span[@property=

        yield item

提取到所需的信息后,用 yield 關(guān)鍵字將 item傳遞給 pipelines.py進(jìn)行進(jìn)一步的處理

三际看、對(duì)提取到的信息進(jìn)行儲(chǔ)存

pipelines.py文件獲得item后將會(huì)調(diào)用管道函數(shù)來(lái)對(duì)item進(jìn)行處理咸产,這里我們把電影的信息保存到 txt文件中去,代碼如下:

# -*- coding: utf-8 -*-
#pipelines.py

class DoubanPipeline(object):
    def __init__(self):
        self.fo = open('info.txt', 'wb')

    def process_item(self, item, spider):
        self.fo.write((item['movie_name'] + '\n').encode('utf-8'))
        self.fo.write((item['movie_dir'] + '\n').encode('utf-8'))
        self.fo.write((item['movie_editor'] + '\n').encode('utf-8'))
        self.fo.write((item['movie_actors'] + '\n').encode('utf-8'))
        self.fo.write((item['movie_type'] + '\n').encode('utf-8'))

        #這里必須返回item仲闽,否則程序會(huì)一直等待脑溢,直到返回item為止
        return item

    def close_spider(self, spider):
        self.fo.close()
    #__init__, 和close_spider 函數(shù)相當(dāng)于c++里的構(gòu)造函數(shù)和析構(gòu)函數(shù)

四、在 setting.py里開啟 DoubanPipeline管道

這里只截取部分相關(guān)的代碼:

# Obey robots.txt rules
#是否遵循網(wǎng)站對(duì)爬蟲的規(guī)則赖欣,一般設(shè)為False屑彻,但默認(rèn)為True
ROBOTSTXT_OBEY = False

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'douban.pipelines.DoubanPipeline': 300,
}

#設(shè)置請(qǐng)求頭,模擬瀏覽器
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Cookie': 'bid=uzUipzgnxdY; ll="118267"; __utmc=30149280; __utmz=30149280.1523088054.4.4.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmc=223695111; __utmz=223695111.1523088054.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __yadk_uid=u46EFxFlzD46PvWysMULc80N9s8k2pp4; _vwo_uuid_v2=DC94F00058615E2C6A432CB494EEB894B|64bbcc3ac402b9490e5de18ce3216c5f; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1523092410%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DFIqLEYPF6UnylF-ja19vuuKZ51u3u5gGYJHpVJ5MRTO-oLkJ_C84HBgYi5OulPwl%26wd%3D%26eqid%3Dd260482b00005bbb000000055ac87ab2%22%5D; _pk_id.100001.4cf6=cbf515d686eadc0b.1523088053.2.1523092410.1523088087.; _pk_ses.100001.4cf6=*; __utma=30149280.1054682088.1514545233.1523088054.1523092410.5; __utmb=30149280.0.10.1523092410; __utma=223695111.979367240.1523088054.1523088054.1523092410.2; __utmb=223695111.0.10.1523092410',
'Host': 'movie.douban.com',
'Upgrade-Insecure-Requests': '1',
}

五顶吮、運(yùn)行爬蟲

進(jìn)入到爬蟲項(xiàng)目的文件夾里執(zhí)行如下命令:

scrapy crawl movieInfoSpider

總結(jié):scrapy爬蟲構(gòu)建順序 items.py-->spiders-->pipelines.py-->settings.py

原文: https://blog.csdn.net/qq_40695895/article/details/79842502

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末社牲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子云矫,更是在濱河造成了極大的恐慌膳沽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件让禀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡陨界,警方通過(guò)查閱死者的電腦和手機(jī)巡揍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菌瘪,“玉大人腮敌,你說(shuō)我怎么就攤上這事阱当。” “怎么了糜工?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵弊添,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捌木,道長(zhǎng)油坝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任刨裆,我火速辦了婚禮澈圈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帆啃。我一直安慰自己瞬女,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布努潘。 她就那樣靜靜地躺著诽偷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疯坤。 梳的紋絲不亂的頭發(fā)上渤刃,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音贴膘,去河邊找鬼卖子。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刑峡,可吹牛的內(nèi)容都是我干的洋闽。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼突梦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诫舅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起宫患,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刊懈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后娃闲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虚汛,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年皇帮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卷哩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡属拾,死狀恐怖将谊,靈堂內(nèi)的尸體忽然破棺而出冷溶,到底是詐尸還是另有隱情,我是刑警寧澤尊浓,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布逞频,位于F島的核電站,受9級(jí)特大地震影響栋齿,放射性物質(zhì)發(fā)生泄漏苗胀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一褒颈、第九天 我趴在偏房一處隱蔽的房頂上張望柒巫。 院中可真熱鬧,春花似錦谷丸、人聲如沸堡掏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)泉唁。三九已至,卻和暖如春揩慕,著一層夾襖步出監(jiān)牢的瞬間亭畜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工迎卤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拴鸵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓蜗搔,卻偏偏與公主長(zhǎng)得像劲藐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子樟凄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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