Python爬蟲(chóng):Scrapy框架基礎(chǔ)框架結(jié)構(gòu)及騰訊爬取

Scrapy終端是一個(gè)交互終端,我們可以在未啟動(dòng)spider的情況下嘗試及調(diào)試代碼页响,也可以用來(lái)測(cè)試XPath或CSS表達(dá)式段誊,查看他們的工作方式,方便我們爬取的網(wǎng)頁(yè)中提取的數(shù)據(jù)没陡。

如果安裝了 IPython 索赏,Scrapy終端將使用 IPython (替代標(biāo)準(zhǔn)Python終端)潜腻。 IPython 終端與其他相比更為強(qiáng)大,提供智能的自動(dòng)補(bǔ)全童番,高亮輸出,及其他特性剃斧。(推薦安裝IPython)

Python學(xué)習(xí)資料或者需要代碼幼东、視頻加Python學(xué)習(xí)群:960410445

1 啟動(dòng)Scrapy Shell

進(jìn)入項(xiàng)目的根目錄,執(zhí)行下列命令來(lái)啟動(dòng)shell:

scrapyshell"https://hr.tencent.com/position.php?&start=0#a"

Scrapy Shell根據(jù)下載的頁(yè)面會(huì)自動(dòng)創(chuàng)建一些方便使用的對(duì)象策橘,例如 Response 對(duì)象娜亿,以及Selector 對(duì)象 (對(duì)HTML及XML內(nèi)容)。

當(dāng)shell載入后沛婴,將得到一個(gè)包含response數(shù)據(jù)的本地 response 變量督赤,輸入response.body將輸出response的包體躲舌,輸出response.headers可以看到response的包頭。

輸入response.selector時(shí)没卸, 將獲取到一個(gè)response 初始化的類(lèi) Selector 的對(duì)象约计,此時(shí)可以通過(guò)使用response.selector.xpath()或response.selector.css()來(lái)對(duì) response 進(jìn)行查詢。

Scrapy也提供了一些快捷方式, 例如response.xpath()或response.css()同樣可以生效(如之前的案例)耕挨。

2 Selectors選擇器

Scrapy Selectors 內(nèi)置 XPath 和 CSS Selector 表達(dá)式機(jī)制

Selector有四個(gè)基本的方法尉桩,最常用的還是xpath:

xpath(): 傳入xpath表達(dá)式,返回該表達(dá)式所對(duì)應(yīng)的所有節(jié)點(diǎn)的selector list列表

extract(): 序列化該節(jié)點(diǎn)為Unicode字符串并返回list

css(): 傳入CSS表達(dá)式翰苫,返回該表達(dá)式所對(duì)應(yīng)的所有節(jié)點(diǎn)的selector list列表沽瘦,語(yǔ)法同 BeautifulSoup4

re(): 根據(jù)傳入的正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行提取析恋,返回Unicode字符串list列表

response.xpath('//title')

3 Item Pipeline

當(dāng)Item在Spider中被收集之后,它將會(huì)被傳遞到Item Pipeline筑凫,這些Item Pipeline組件按定義的順序處理Item并村。

每個(gè)Item Pipeline都是實(shí)現(xiàn)了簡(jiǎn)單方法的Python類(lèi),比如決定此Item是丟棄而存儲(chǔ)棚潦。以下是item pipeline的一些典型應(yīng)用:

驗(yàn)證爬取的數(shù)據(jù)(檢查item包含某些字段膝昆,比如說(shuō)name字段)

查重(并丟棄)

將爬取結(jié)果保存到文件或者數(shù)據(jù)庫(kù)中

編寫(xiě)item pipeline很簡(jiǎn)單荚孵,item pipiline組件是一個(gè)獨(dú)立的Python類(lèi),其中process_item()方法必須實(shí)現(xiàn):

Pipeline實(shí)現(xiàn)文件的寫(xiě)入打開(kāi)操作

以下pipeline將所有(從所有'spider'中)爬取到的item骄呼,存儲(chǔ)到一個(gè)獨(dú)立地txt文件

啟用一個(gè)Item Pipeline組件

為了啟用Item Pipeline組件蜓萄,必須將它的類(lèi)添加到 settings.py文件ITEM_PIPELINES 配置哆致,就像下面這個(gè)例子:

ITEM_PIPELINES = {'tianya.pipelines.TianyaPipeline':300,}

分配給每個(gè)類(lèi)的整型值,確定了他們運(yùn)行的順序耻蛇,item按數(shù)字從低到高的順序胞此,通過(guò)pipeline,通常將這些數(shù)字定義在0-1000范圍內(nèi)(0-1000隨意設(shè)置夺蛇,數(shù)值越低酣胀,組件的優(yōu)先級(jí)越高)

4 Spider

Spider類(lèi)定義了如何爬取某個(gè)(或某些)網(wǎng)站。包括了爬取的動(dòng)作(例如:是否跟進(jìn)鏈接)以及如何從網(wǎng)頁(yè)的內(nèi)容中提取結(jié)構(gòu)化數(shù)據(jù)(爬取item)甚脉。 換句話說(shuō)牺氨,Spider就是您定義爬取的動(dòng)作及分析某個(gè)網(wǎng)頁(yè)(或者是有些網(wǎng)頁(yè))的地方。

class scrapy.Spider是最基本的類(lèi)夷狰,所有編寫(xiě)的爬蟲(chóng)必須繼承這個(gè)類(lèi)郊霎。

主要用到的函數(shù)及調(diào)用順序?yàn)椋?/p>

__init__(): 初始化爬蟲(chóng)名字和start_urls列表

start_requests() 調(diào)用make_requests_from url():生成Requests對(duì)象交給Scrapy下載并返回response

parse(): 解析response,并返回Item或Requests(需指定回調(diào)函數(shù))瘫证。Item傳給Item pipline持久化 庄撮, 而Requests交由Scrapy下載洞斯,并由指定的回調(diào)函數(shù)處理(默認(rèn)parse()),一直進(jìn)行循環(huán)么抗,直到處理完所有的數(shù)據(jù)為止亚铁。

源碼參考

主要屬性和方法

name

定義spider名字的字符串徘溢。

例如,如果spider爬取 mywebsite.com 然爆,該spider通常會(huì)被命名為 mywebsite

allowed_domains

包含了spider允許爬取的域名(domain)的列表曾雕,可選。

start_urls

初始URL元祖/列表切诀。當(dāng)沒(méi)有制定特定的URL時(shí),spider將從該列表中開(kāi)始進(jìn)行爬取检盼。

start_requests(self)

該方法必須返回一個(gè)可迭代對(duì)象(iterable)翘单。該對(duì)象包含了spider用于爬缺脑(默認(rèn)實(shí)現(xiàn)是使用 start_urls 的url)的第一個(gè)Request柬唯。

當(dāng)spider啟動(dòng)爬取并且未指定start_urls時(shí),該方法被調(diào)用失晴。

parse(self, response)

當(dāng)請(qǐng)求url返回網(wǎng)頁(yè)沒(méi)有指定回調(diào)函數(shù)時(shí)拘央,默認(rèn)的Request對(duì)象回調(diào)函數(shù)。用來(lái)處理網(wǎng)頁(yè)返回的response拆又,以及生成Item或者Request對(duì)象栏账。

log(self, message[, level, component])

使用 scrapy.log.msg() 方法記錄(log)message。 更多數(shù)據(jù)請(qǐng)參見(jiàn)logging

5 案例:騰訊招聘網(wǎng)自動(dòng)翻頁(yè)采集

創(chuàng)建一個(gè)新的爬蟲(chóng):

scrapy genspider tencent "tencent.com"

編寫(xiě)items.py

獲取職位名稱(chēng)竖般、詳細(xì)信息涣雕、

編寫(xiě)tencent.py

編寫(xiě)pipeline.py文件

在 setting.py 里設(shè)置ITEM_PIPELINES

ITEM_PIPELINES = {"mySpider.pipelines.TencentJsonPipeline":300}

執(zhí)行爬蟲(chóng):

scrapy crawl tencent.py

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市男杈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旺垒,老刑警劉巖先蒋,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異眯搭,居然都是意外死亡业岁,警方通過(guò)查閱死者的電腦和手機(jī)笔时,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)借笙,“玉大人较锡,你說(shuō)我怎么就攤上這事∨渭桑” “怎么了掂墓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵君编,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我祠乃,道長(zhǎng)兑燥,這世上最難降的妖魔是什么降瞳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任蚓胸,我火速辦了婚禮沛膳,結(jié)果婚禮上汛聚,老公的妹妹穿的比我還像新娘。我一直安慰自己叹哭,他們只是感情好痕貌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布芯侥。 她就那樣靜靜地躺著乳讥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唉工。 梳的紋絲不亂的頭發(fā)上汹忠,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天宽菜,我揣著相機(jī)與錄音,去河邊找鬼继谚。 笑死阵幸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诡壁。 我是一名探鬼主播荠割,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纽帖!你這毒婦竟也來(lái)了懊直?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雕崩,失蹤者是張志新(化名)和其女友劉穎融撞,沒(méi)想到半個(gè)月后尝偎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肤寝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鲤看,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耍群。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曹抬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚷闭,我是刑警寧澤赖临,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布兢榨,位于F島的核電站顺饮,受9級(jí)特大地震影響凌那,放射性物質(zhì)發(fā)生泄漏帽蝶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一佃乘、第九天 我趴在偏房一處隱蔽的房頂上張望驹尼。 院中可真熱鬧,春花似錦程帕、人聲如沸地啰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至株茶,卻和暖如春图焰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僵闯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工鳖粟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拙绊,地道東北人泳秀。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓嗜傅,卻偏偏與公主長(zhǎng)得像檩赢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子币他,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲(chóng)模...
    陳思煜閱讀 12,670評(píng)論 4 46
  • 上篇回顧:填報(bào)志愿的三要素你知道多少蝴悉? (上一篇):我四年大學(xué)兼職創(chuàng)業(yè)賺10萬(wàn)的經(jīng)歷(連載3) 初次到杭州的失落感...
    被子哥閱讀 627評(píng)論 6 4
  • 如果有用到AddDate的,有三條建議:不要用AddDate對(duì)月進(jìn)行加減操作不要用AddDate對(duì)月進(jìn)行加減操作不...
    Tibbersshao閱讀 11,808評(píng)論 1 4
  • 1月9日瘾敢,一張男孩站在教室中頭發(fā)眉毛結(jié)出"冰花"的照片走紅拍冠。照片中的男孩是云南魯?shù)榭h新街鎮(zhèn)轉(zhuǎn)山包小學(xué)學(xué)生。...
    Mandy曼翎閱讀 292評(píng)論 0 0
  • 看小說(shuō)的時(shí)候時(shí)間過(guò)的很快簇抵,心中也會(huì)出現(xiàn)一個(gè)聲音你這是不對(duì)的庆杜,你應(yīng)該用時(shí)間去學(xué)習(xí) 然而自己還是沒(méi)有停下來(lái)“看小說(shuō)” ...
    張志鵬_7bba閱讀 136評(píng)論 0 0