Scrapy定向爬虫教程(一)——创建运行项目和基本介绍
前言
目前網(wǎng)上的Scrapy中文教程比較少,而且大多教程使用的Scrapy版本較老,比如說這個Scrapy 0.25 文檔,如其名,上古時期的翻譯文檔;再比如極客學(xué)院的視頻教程使用的是1.0.x版本,跟新版相比還是有出入。這種情況使得新手入門Scrapy較為困難,而且各種掉坑。本人也是只剛?cè)腴T的菜鳥,我希望能用菜鳥的語言給其他想要踏進(jìn)Scrapy大門的小菜鳥指引一條道路。至少比我踩得坑少點(diǎn)吧^-^。
開發(fā)環(huán)境
- Ubuntu 16.04
- Python 2.7.12
- Scrapy 1.1.2
- PyCharm 2016.1.4
介紹
本教程將帶領(lǐng)大家寫一個爬取Discuz模板論壇網(wǎng)站的定向爬蟲,網(wǎng)上的Discuz論壇數(shù)不勝數(shù),當(dāng)然我也不敢公開在這教唆大家去侵犯某一個,只好祭出自己搭的論壇來供大家練習(xí)——心韻論壇。當(dāng)然,既然是Discuz模板,用哪個網(wǎng)站做教程都是大同小異的。有了思路后,其他網(wǎng)站也會觸類旁通。本教程分為以下八個部分,將分為八篇博文向大家介紹:
- Scrapy安裝與項(xiàng)目創(chuàng)建
- 通過Selector選擇器解析頁面獲取內(nèi)容
- 爬取多個頁面
- 數(shù)據(jù)存入MongoDB
- 保持登陸狀態(tài)
- 分析表單并回帖
- 使用代理
- 結(jié)束郵件通知
好,廢話不多說,我們進(jìn)入第一部分。
Scrapy安裝
既然選擇了Scrapy,那么使用Linux對你來說也是家常便飯了吧,安裝教程請戳鏈接Ubuntu16.04安裝Scrapy命令
新建項(xiàng)目
首先進(jìn)入你想創(chuàng)建項(xiàng)目的目錄,我為了方便,就直接在home目錄下建項(xiàng)目了,因?yàn)槲覀円廊〉木W(wǎng)站域名是heartsong.top,為了方便識別,我們把項(xiàng)目的名字起做heartsong,在命令行中輸入以下命令:
scrapy startproject heartsong- 1
- 1
輸出信息如圖,表示項(xiàng)目創(chuàng)建成功
項(xiàng)目結(jié)構(gòu)
我們通過PyCharm打開項(xiàng)目
發(fā)現(xiàn)默認(rèn)生成的項(xiàng)目有如下結(jié)構(gòu)
我們發(fā)現(xiàn),默認(rèn)生成的項(xiàng)目有下列幾個文件
* __init__.py × 2
* items.py
* pipelines.py
* settings.py
* scrapy.cfg
在這幾個文件中,兩個__init__.py和scrapy.cfg是用不到的,不多說。下面,我們來介紹一下我們在今后用的到的文件的基本用途
items.py
雙擊打開這個文件,看一下都初始化了什么東西
# -*- coding: urf-8 -*- # Define here the models for your scrapyed items # # See documentation in # http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass HeartsongItem(scrapy.Item):# define the fields for your item here like:# # name = scrapy.Filed()pass- 1
- 9
- 10
通過里面的注釋可見,這個文件的作用是定義我們要爬取信息的標(biāo)準(zhǔn)格式,打個比方說,如果我們要爬取一批人的個人信息,包括姓名,性別,生日,那么我們可以這樣來書寫這個文件
import scrapyclass HeartsongItem(scrapy.Item):name = scrapy.Filed()sex = scrapy.Filed()birthday = scrapy.Filed()- 6
易見本文件只是定義了一個類,至于什么時候?qū)嵗?#xff0c;怎么保存它,請繼續(xù)了解下面的內(nèi)容。
settings.py
如其名,這是本項(xiàng)目的配置文件,里面注釋著很多常用的配置項(xiàng),我們通過在其他文件中引入本文件的方式來使用這些配置項(xiàng)。
當(dāng)然,我們可以把這些注釋都刪掉,等需要開啟哪個功能的時候再另行編輯。
我們此處先看看默認(rèn)打開的配置項(xiàng)吧
- 1
因?yàn)槲覀儗懙氖嵌ㄏ蚺老x,前面三個按默認(rèn)即可,我們不去管他。看第四項(xiàng),注釋里說這個配置項(xiàng)的意思是是否遵守robots.txt,那么robots.txt是個什么東西呢?
通俗來說,robots.txt是遵循Robot協(xié)議的一個文件,它保存在網(wǎng)站的服務(wù)器中,它的作用是,告訴搜索引擎爬蟲,本網(wǎng)站哪些目錄下的網(wǎng)頁不希望你進(jìn)行爬取收錄。在Scrapy啟動后,會在第一時間訪問網(wǎng)站的robots.txt文件,然后決定該網(wǎng)站的爬取范圍。
當(dāng)然,我們并不是在做搜索引擎,而且在某些情況下我們想要獲取的內(nèi)容恰恰是被robots.txt所禁止訪問的。所以,我們就將此配置項(xiàng)設(shè)置為False,拒絕遵守Robot協(xié)議!
pipelines.py
雙擊打開這個文件,看看都初始化了什么東西
# -*- coding: utf-8 -*-# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.htmlclass HeartsongPipeline(object):def process_item(self, item, spider):return item- 1
從注釋中所能得到的信息微乎其微,只告訴我們要啟用此文件的話必須要在settings.py里配置一下ITEM_PIPELINES,好,那我們就老老實(shí)實(shí)的去settings.py里配置一下吧,不過注意,此處有坑,在1.0.x版本(極客學(xué)院教程中使用),配置項(xiàng)用list格式來書寫,而在最新的1.1.2版本中,需要用dict格式,否則會報錯,無法爬取,配置好后,我們的setting.py如下:
# -*- coding: utf-8 -*-BOT_NAME = 'heartsong' SPIDER_MODULES = ['heartsong.spiders'] NEWSPIDER_MODULE = 'heartsong.spider'ROBORSTXT_OBEY = TrueITEM_PIPELINES = {'heartsong.pipelines.HeartsongPipeline': 300, }- 1
此處的300表示優(yōu)先級,因?yàn)楸卷?xiàng)目只用到這一個pipeline,所以隨意取0-1000中的一個數(shù)值即可。
好,鏡頭切回pipelines.py,這個文件到底有什么用呢?當(dāng)然用處很多啦,本教程中介紹的作用只有兩個:
* 對爬取到的數(shù)據(jù)(Item)進(jìn)行處理,比如存入數(shù)據(jù)庫
* 爬蟲結(jié)束時產(chǎn)生事件,比如發(fā)送一封郵件
此處只是介紹一下,具體的操作要看后續(xù)教程。
爬蟲呢?
默認(rèn)生成的項(xiàng)目結(jié)構(gòu)至此我們已經(jīng)介紹完了,可是我們是來做爬蟲的吧,爬蟲呢?莫急莫急,互聯(lián)網(wǎng)上的網(wǎng)站數(shù)不勝數(shù),變化多端,我們的爬蟲當(dāng)然不可能一成不變,所以爬蟲文件我們需要自己定義。
爬蟲
在默認(rèn)生成的spiders目錄下新建heartsong_spider.py,我們的爬蟲就寫在這里面,因?yàn)槭墙榻B,那么此處就寫個簡單的下載網(wǎng)站的主頁,讓大家能運(yùn)行一下,感受一下scrapy。
import scrapyclass HeartsongSpider(scrapy.spiders.Spider):name = "heartsong" # 爬蟲的名字,執(zhí)行時使用allowed_domains = ["heartsong.top"] # 允許爬取的域名,非此域名的網(wǎng)頁不會爬取start_urls = ["http://www.heartsong.top" # 起始url,此例只爬這一個頁面 ]def parse(self, response): # 真正的爬蟲方法html = response.body # response是獲取到的來自網(wǎng)站的返回# 以下四行將html存入文件filename = "index.html"file = open(filename, "w")file.write(html)file.close()- 1
要說明的是,這個類不是隨心所欲來寫的,name,allowed_domains,start_urls,都是類似于”重載”的值。也就是說,scrapy內(nèi)部會檢測這些變量的值,變量名不可以起成其它的名字,類似的變量之后還會有介紹。至于parse方法,就是重載的父類的方法,我們爬蟲的主體一般就寫在這里面。
好,現(xiàn)在讓我們來運(yùn)行它
在命令行中進(jìn)入heartsong目錄下,執(zhí)行命令
此處的名字heartsong是與爬蟲類中的name保持一致。
輸出的信息還是比較多的,我就不截完了。
來到heartsong目錄下看看有沒有下載成功
雙擊點(diǎn)開看看
發(fā)現(xiàn)很OK。
小結(jié)
本部分介紹了Scrapy的下載,創(chuàng)建項(xiàng)目,基本文件,運(yùn)行程序這一部分入門知識,在下一個部分中,我們將學(xué)習(xí)如何使用Selector選擇器在網(wǎng)頁中提取我們想要的內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的Scrapy定向爬虫教程(一)——创建运行项目和基本介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrapy匹配xpath时tbody标
- 下一篇: acrgis api for javaS