全局安裝scrapy
pip install scrapy
scrapy原理圖
圖片中的數(shù)字標(biāo)明了程序運(yùn)行的基本過(guò)程以及幾大主要模塊蜒车,運(yùn)行過(guò)程:
1奋单,spider發(fā)起請(qǐng)求(請(qǐng)求可以經(jīng)過(guò)中間件進(jìn)行處理)
2镜硕,引擎收到請(qǐng)求后先交給調(diào)度器(scheduler)哥桥,由調(diào)度器決定什么時(shí)候發(fā)起請(qǐng)求
3岁钓,調(diào)度器將請(qǐng)求交給引擎執(zhí)行(以上兩步都有程序自動(dòng)管理,其實(shí)不用管)
4偎巢,引擎將請(qǐng)求交給下載器
5蔼夜,下載器按照請(qǐng)求內(nèi)容去對(duì)應(yīng)的網(wǎng)址發(fā)起請(qǐng)求并返回響應(yīng)(下載器發(fā)起請(qǐng)求和返回響應(yīng)都可以經(jīng)過(guò)中間件處理)
6,引擎收到響應(yīng)后交給spider處理
7压昼,spider根據(jù)響應(yīng)內(nèi)容可以做出再發(fā)出新請(qǐng)求求冷,或是直接從響應(yīng)中截取需要的內(nèi)容,并包裝成一個(gè)item返回給engine
8窍霞,item pipelines收到item匠题,做數(shù)據(jù)整理,數(shù)據(jù)整形但金,保存到數(shù)據(jù)庫(kù)等操作韭山,還可以再發(fā)送請(qǐng)求,做新一輪的爬取
新建一個(gè)爬蟲(chóng)項(xiàng)目(以糗事百科為例傲绣,這個(gè)比較簡(jiǎn)單掠哥,反扒沒(méi)那么厲害)
setting.py
scrapy的全局配置文件,可以設(shè)置請(qǐng)求時(shí)間間隔塞琼,請(qǐng)求headers等等菠净,這里我們修改兩個(gè)地方
ROBOTSTXT_OBEY = False #不遵守robots協(xié)議
# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
修改默認(rèn)的請(qǐng)求頭部,不然容易會(huì)被反爬彪杉,這里可設(shè)置的東西有很多毅往,可以根據(jù)文檔自己查看
新建爬蟲(chóng)
在spiders文件夾內(nèi)新建qsbk_spider.py文件
import scrapy
class QSBKSpider(scrapy.Spider):
name = 'qsbk_spider' #定義爬蟲(chóng)名字,很重要
allowed_domains = ['qiushibaike.com'] #爬蟲(chóng)的抓取的域名派近,未定義的不抓
start_urls = ['https://www.qiushibaike.com/8hr/page/1/'] #爬蟲(chóng)的起始頁(yè)攀唯,從哪個(gè)網(wǎng)址開(kāi)始抓取
#默認(rèn)獲取內(nèi)容響應(yīng)后的處理方法,對(duì)應(yīng)原理圖6渴丸、7步之間
def parse(self, response):
pass
新建入口文件run.py
先把爬蟲(chóng)放到一遍侯嘀,接著新建一個(gè)入口文件另凌,方便我們?cè)诰庉嬈髦校ㄎ乙话阌玫膙scode,pycharm類(lèi)似)進(jìn)行調(diào)試
from scrapy import cmdline
cmdline.execute(['scrapy','crawl','qsbk_spider']) #第三個(gè)參數(shù)就是剛剛新建的爬蟲(chóng)的name
這樣就可以在spider里打斷點(diǎn)方便調(diào)試了
初步準(zhǔn)備工作完成戒幔,下一步我們開(kāi)始寫(xiě)爬蟲(chóng)的具體內(nèi)容