Scrapy定向爬蟲教程(一)——建立執行專案和基本介紹
由於阿里雲騰訊雲加強域名及伺服器的備案監管,同時由於相關法規規定個人不可運營論壇類網站。本系列部落格中所使用的本人搭建的論壇已無法繼續運營,但本部落格中提供的程式碼仍適用於其它基於Discuz框架的論壇,小夥伴們可以邊修改程式碼邊學習。
前言
目前網上的Scrapy中文教程比較少,而且大多教程使用的Scrapy版本較老,比如說這個Scrapy 0.25 文件,如其名,上古時期的翻譯文件;再比如極客學院的視訊教程使用的是1.0.x版本,跟新版相比還是有出入。這種情況使得新手入門Scrapy較為困難,而且各種掉坑。本人也是隻剛入門的菜鳥,我希望能用菜鳥的語言給其他想要踏進Scrapy大門的小菜鳥指引一條道路。至少比我踩得坑少點吧^-^。
開發環境
- Ubuntu 16.04
- Python 2.7.12
- Scrapy 1.1.2
- PyCharm 2016.1.4
介紹
本教程將帶領大家寫一個爬取Discuz模板論壇網站的定向爬蟲,網上的Discuz論壇數不勝數,當然我也不敢公開在這教唆大家去侵犯某一個,只好祭出自己搭的論壇來供大家練習——心韻論壇。當然,既然是Discuz模板,用哪個網站做教程都是大同小異的。有了思路後,其他網站也會觸類旁通。本教程分為以下八個部分,將分為八篇博文向大家介紹:
- Scrapy安裝與專案建立
- 通過Selector選擇器解析頁面獲取內容
- 爬取多個頁面
- 資料存入MongoDB
- 保持登陸狀態
- 分析表單並回帖
- 使用代理(參考http://www.kohn.com.cn/wordpress/?p=208)
好,廢話不多說,我們進入第一部分。
Scrapy安裝
既然選擇了Scrapy,那麼使用Linux對你來說也是家常便飯了吧,安裝教程請戳連結Ubuntu16.04安裝Scrapy命令
新建專案
首先進入你想建立專案的目錄,我為了方便,就直接在home目錄下建專案了,因為我們要爬取的網站域名是heartsong.top,為了方便識別,我們把專案的名字起做heartsong,在命令列中輸入以下命令:
scrapy startproject heartsong
輸出資訊如圖,表示專案建立成功
專案結構
我們通過PyCharm開啟專案
發現預設生成的專案有如下結構
我們發現,預設生成的專案有下列幾個檔案
* __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.html
import scrapy
class HeartsongItem(scrapy.Item):
# define the fields for your item here like:
#
# name = scrapy.Filed()
pass
通過裡面的註釋可見,這個檔案的作用是定義我們要爬取資訊的標準格式,打個比方說,如果我們要爬取一批人的個人資訊,包括姓名,性別,生日,那麼我們可以這樣來書寫這個檔案
import scrapy
class HeartsongItem(scrapy.Item):
name = scrapy.Filed()
sex = scrapy.Filed()
birthday = scrapy.Filed()
易見本檔案只是定義了一個類,至於什麼時候例項化它,怎麼儲存它,請繼續瞭解下面的內容。
settings.py
如其名,這是本專案的配置檔案,裡面註釋著很多常用的配置項,我們通過在其他檔案中引入本檔案的方式來使用這些配置項。
當然,我們可以把這些註釋都刪掉,等需要開啟哪個功能的時候再另行編輯。
我們此處先看看預設開啟的配置項吧
BOT_NAME = 'heartsong'
SPIDER_MODULES = ['heartsong.spiders']
NEWSPIDER_MODULE = 'heartsong.spider'
# Obey robots.txt rules
ROBORSTXT_OBEY = True
因為我們寫的是定向爬蟲,前面三個按預設即可,我們不去管他。看第四項,註釋裡說這個配置項的意思是是否遵守robots.txt
,那麼robots.txt
是個什麼東西呢?
通俗來說,robots.txt
是遵循Robot協議的一個檔案,它儲存在網站的伺服器中,它的作用是,告訴搜尋引擎爬蟲,本網站哪些目錄下的網頁不希望你進行爬取收錄。在Scrapy啟動後,會在第一時間訪問網站的robots.txt
檔案,然後決定該網站的爬取範圍。
當然,我們並不是在做搜尋引擎,而且在某些情況下我們想要獲取的內容恰恰是被robots.txt
所禁止訪問的。所以,我們就將此配置項設定為False
,拒絕遵守Robot協議!
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.html
class HeartsongPipeline(object):
def process_item(self, item, spider):
return item
從註釋中所能得到的資訊微乎其微,只告訴我們要啟用此檔案的話必須要在settings.py
裡配置一下ITEM_PIPELINES
,好,那我們就老老實實的去settings.py
裡配置一下吧,不過注意,此處有坑,在1.0.x版本(極客學院教程中使用),配置項用list格式來書寫,而在最新的1.1.2版本中,需要用dict格式,否則會報錯,無法爬取,配置好後,我們的setting.py
如下:
# -*- coding: utf-8 -*-
BOT_NAME = 'heartsong'
SPIDER_MODULES = ['heartsong.spiders']
NEWSPIDER_MODULE = 'heartsong.spider'
ROBORSTXT_OBEY = True
ITEM_PIPELINES = {
'heartsong.pipelines.HeartsongPipeline': 300,
}
此處的300表示優先順序,因為本專案只用到這一個pipeline,所以隨意取0-1000中的一個數值即可。
好,鏡頭切回pipelines.py
,這個檔案到底有什麼用呢?當然用處很多啦,本教程中介紹的作用只有兩個:
* 對爬取到的資料(Item)進行處理,比如存入資料庫
* 爬蟲結束時產生事件,比如傳送一封郵件
此處只是介紹一下,具體的操作要看後續教程。
爬蟲呢?
預設生成的專案結構至此我們已經介紹完了,可是我們是來做爬蟲的吧,爬蟲呢?莫急莫急,網際網路上的網站數不勝數,變化多端,我們的爬蟲當然不可能一成不變,所以爬蟲檔案我們需要自己定義。
爬蟲
在預設生成的spiders
目錄下新建heartsong_spider.py
,我們的爬蟲就寫在這裡面,因為是介紹,那麼此處就寫個簡單的下載網站的主頁,讓大家能執行一下,感受一下scrapy。
import scrapy
class HeartsongSpider(scrapy.spiders.Spider):
name = "heartsong" # 爬蟲的名字,執行時使用
allowed_domains = ["heartsong.top"] # 允許爬取的域名,非此域名的網頁不會爬取
start_urls = [
"http://www.heartsong.top" # 起始url,此例只爬這一個頁面
]
def parse(self, response): # 真正的爬蟲方法
html = response.body # response是獲取到的來自網站的返回
# 以下四行將html存入檔案
filename = "index.html"
file = open(filename, "w")
file.write(html)
file.close()
要說明的是,這個類不是隨心所欲來寫的,name
,allowed_domains
,start_urls
,都是類似於”過載”的值。也就是說,scrapy內部會檢測這些變數的值,變數名不可以起成其它的名字,類似的變數之後還會有介紹。至於parse
方法,就是過載的父類的方法,我們爬蟲的主體一般就寫在這裡面。
好,現在讓我們來執行它
在命令列中進入heartsong目錄下,執行命令
scrapy crawl heartsong
此處的名字heartsong是與爬蟲類中的name
保持一致。
輸出的資訊還是比較多的,我就不截完了。
來到heartsong目錄下看看有沒有下載成功
雙擊點開看看
發現很OK。
小結
本部分介紹了Scrapy的下載,建立專案,基本檔案,執行程式這一部分入門知識,在下一個部分中,我們將學習如何使用Selector選擇器在網頁中提取我們想要的內容。
相關文章
- 在scrapy框架下建立爬蟲專案,建立爬蟲檔案,執行爬蟲檔案框架爬蟲
- Scrapy建立爬蟲專案爬蟲
- Python爬蟲教程-31-建立 Scrapy 爬蟲框架專案Python爬蟲框架
- Python爬蟲教程-32-Scrapy 爬蟲框架專案 Settings.py 介紹Python爬蟲框架
- Python爬蟲教程-30-Scrapy 爬蟲框架介紹Python爬蟲框架
- scrapy入門教程()部署爬蟲專案爬蟲
- 利用scrapy建立初始Python爬蟲專案Python爬蟲
- Java爬蟲入門(一)——專案介紹Java爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- VSCrawler爬蟲專案介紹爬蟲
- scrapy通用專案和爬蟲程式碼模板爬蟲
- Scrapy入門-第一個爬蟲專案爬蟲
- 爬蟲代理 Scrapy 框架詳細介紹 2爬蟲框架
- 建立爬蟲專案爬蟲
- Python爬蟲教程-01-爬蟲介紹Python爬蟲
- 如何快速建立一個爬蟲專案爬蟲
- 介紹一款能取代 Scrapy 的 Python 爬蟲框架 - feapderPython爬蟲框架
- Python爬蟲教程-34-分散式爬蟲介紹Python爬蟲分散式
- Scrapy之"並行"爬蟲並行爬蟲
- scrapy 框架新建一個 爬蟲專案詳細步驟框架爬蟲
- 爬蟲介紹爬蟲
- Python爬蟲深造篇(四)——Scrapy爬蟲框架啟動一個真正的專案Python爬蟲框架
- python爬蟲學習筆記 4.2 (Scrapy入門案例(建立專案))Python爬蟲筆記
- 通用新聞爬蟲開發系列(專案介紹)爬蟲
- Python scrapy爬蟲框架簡介Python爬蟲框架
- scrapy爬蟲爬蟲
- Python3 大型網路爬蟲實戰 002 --- scrapy 爬蟲專案的建立及爬蟲的建立 --- 例項:爬取百度標題和CSDN部落格Python爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- puppeteer介紹(一)爬蟲,效能,注入爬蟲
- 爬蟲教程——用Scrapy爬取豆瓣TOP250爬蟲
- python爬蟲系列(三)scrapy基本概念Python爬蟲
- 爬蟲課程(六)|Scrapy安裝以及目錄結構介紹爬蟲
- Scrapy爬蟲-草稿爬蟲
- Scrapy爬蟲框架爬蟲框架
- 第一章 爬蟲介紹爬蟲
- 爬蟲專案(一)爬蟲+jsoup輕鬆爬知乎爬蟲JS
- 爬蟲(9) - Scrapy框架(1) | Scrapy 非同步網路爬蟲框架爬蟲框架非同步