scrapy获取a标签的连接_Python爬虫 scrapy框架初探及实战!
Scrapy框架安裝
操作環(huán)境介紹
操作系統(tǒng):Ubuntu19.10
Python版本:Python3.7.4
編譯器:pycharm社區(qū)版
安裝scrapy框架(linux系統(tǒng)下)
安裝scrapy框架最繁瑣的地方在于要安裝很多的依賴包,若缺少依賴包,則scrapy框架的安裝就會(huì)報(bào)錯(cuò)。
不過(guò)anaconda環(huán)境中會(huì)自帶lxml模塊,可以免去一些步驟
在終端輸入命令安裝依賴包
sudo apt-get install python-devsudo apt-get install libevent-dev
根據(jù)提示輸入y確認(rèn)安裝,耐心等待安裝完成即可
安裝完所需要的依賴包之后,就可以直接用pip安裝scrapy框架了
pip install scrapy在終端輸入命令后,可能會(huì)出現(xiàn)網(wǎng)絡(luò)響應(yīng)超時(shí)等報(bào)錯(cuò)
經(jīng)過(guò)幾次的嘗試之后,我認(rèn)為這是軟件源的問(wèn)題導(dǎo)致下載過(guò)慢,建議更換清華的鏡像源來(lái)安裝
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple在命令的末尾加上-i來(lái)暫時(shí)使用指定的鏡像源來(lái)安裝scrapy框架
在排除其他問(wèn)題的影響后,若安裝速度依舊不理想,可多嘗試幾個(gè)源來(lái)安裝
阿里云 http://mirrors.aliyun.com/pypi/simple/中國(guó)科技大學(xué) https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清華大學(xué) https://pypi.tuna.tsinghua.edu.cn/simple/
中國(guó)科學(xué)技術(shù)大學(xué) http://pypi.mirrors.ustc.edu.cn/simple/
ok,我們可以看到更換源之后的下載速度有了顯著的提升,只需要等待幾秒鐘就可以看到安裝成功的標(biāo)志
檢測(cè)安裝是否成功
打開(kāi)終端,輸入命令查看scrapy版本
scrapy --version看到類(lèi)似下圖所示的版本信息:
再輸入命令
scrapy bench這條命令是調(diào)用scrapy去爬取一個(gè)空網(wǎng)址的內(nèi)容,再輸入命令之后,看到scrapy正在運(yùn)行去爬取空網(wǎng)址的內(nèi)容即安裝成功了這個(gè)框架
Scrapy框架爬取原理
Scrapy框架的主體結(jié)構(gòu)分為五個(gè)部分:
Scrapy Engine(引擎):負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號(hào)、數(shù)據(jù)傳遞等。
Scheduler(調(diào)度器):它負(fù)責(zé)接受引擎發(fā)送過(guò)來(lái)的Request請(qǐng)求,并按照一定的方式進(jìn)行整理排列,入隊(duì),當(dāng)引擎需要時(shí),交還給引擎。
Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請(qǐng)求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來(lái)處理。
Spider(爬蟲(chóng)):它負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器)。
Item Pipeline(管道):它負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過(guò)濾、存儲(chǔ)等)的地方。
它還有兩個(gè)可以自定義下載功能的中間件:
Downloader Middlewares(下載中間件):一個(gè)可以自定義擴(kuò)展下載功能的組件。
Spider Middlewares(Spider中間件):一個(gè)可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件。
Scrapy框架運(yùn)行方式
由上圖可以看出,引擎就相當(dāng)于框架中的大腦,調(diào)配著其他部分的運(yùn)作。
首先爬蟲(chóng)文件向引擎發(fā)送網(wǎng)址請(qǐng)求,在經(jīng)由引擎將網(wǎng)址發(fā)送給調(diào)度器,調(diào)度器通過(guò)內(nèi)部的函數(shù)將發(fā)來(lái)的網(wǎng)址進(jìn)行隊(duì)列操作,將排好隊(duì)的網(wǎng)址重新發(fā)送回引擎。引擎接收到了發(fā)送回來(lái)的隊(duì)列之后,便將請(qǐng)求交給下載器,由下載器從外部網(wǎng)頁(yè)獲取網(wǎng)頁(yè)源碼,將獲取到的響應(yīng)數(shù)據(jù)再發(fā)送回引擎。引擎接收到下載器發(fā)回的網(wǎng)頁(yè)源碼之后,再將數(shù)據(jù)傳回爬蟲(chóng)文件,由爬蟲(chóng)文件負(fù)責(zé)對(duì)html數(shù)據(jù)的提取,等到數(shù)據(jù)提取完畢,再把數(shù)據(jù)發(fā)送給引擎。引擎對(duì)爬蟲(chóng)文件發(fā)送來(lái)的內(nèi)容進(jìn)行檢測(cè),若判斷傳過(guò)來(lái)的內(nèi)容為數(shù)據(jù),則引擎將數(shù)據(jù)發(fā)送給專(zhuān)門(mén)保存文件的管道數(shù)據(jù),管道文件接收到發(fā)來(lái)的數(shù)據(jù)之后,就可以有選擇的保存在數(shù)據(jù)庫(kù)或文件中。
至此,一次完整的爬蟲(chóng)項(xiàng)目運(yùn)行完成。
Scrapy框架實(shí)例
使用Scrapy爬取阿里文學(xué)
使用scrapy框架爬取的一般步驟
1.創(chuàng)建爬蟲(chóng)項(xiàng)目
2.創(chuàng)建爬蟲(chóng)文件
3.編寫(xiě)爬蟲(chóng)文件
4.編寫(xiě)items
5.編寫(xiě)pipelines
6.配置settings
7.運(yùn)行scrapy框架
注:上面的步驟是使用scrapy的一般步驟,實(shí)際操作時(shí)可以根據(jù)爬取頁(yè)面的難易度來(lái)調(diào)整這些步驟
1.創(chuàng)建爬蟲(chóng)項(xiàng)目
首先找到一個(gè)文件夾,用于保存項(xiàng)目的內(nèi)容
打開(kāi)終端,在該目錄下輸入:
scrapy startproject [項(xiàng)目名稱(chēng)]成功創(chuàng)建
這時(shí)可以發(fā)現(xiàn)文件夾下多了一個(gè)以項(xiàng)目名稱(chēng)命名的文件夾
進(jìn)入文件夾,發(fā)現(xiàn)里面已經(jīng)有了框架的模板文件
init?.py //初始文件
items.py//定義目標(biāo),想要爬什么信息
pipelines.py//爬后處理
middlewares.py//中間鍵
settings.py//文件的設(shè)置信息
2.創(chuàng)建爬蟲(chóng)文件
scrapy genspider [爬蟲(chóng)名] [想要爬取網(wǎng)址的域名]注意:爬蟲(chóng)名一定不能與項(xiàng)目名一樣,否則會(huì)創(chuàng)建失敗
3.分析文件,編寫(xiě)爬蟲(chóng)文件
我們?cè)谏弦徊絼?chuàng)建了爬蟲(chóng)文件之后會(huì)發(fā)現(xiàn)多出來(lái)一個(gè)py文件在項(xiàng)目名目錄下
打開(kāi)aliwx.py文件,開(kāi)始分析網(wǎng)頁(yè),提取想要爬取的信息
打開(kāi)阿里文學(xué)的官網(wǎng)首頁(yè),先設(shè)定我們想要爬取的內(nèi)容為最近更新的書(shū)名及章節(jié),使用xpath語(yǔ)法進(jìn)行提取
打開(kāi)項(xiàng)目文件夾下的spider文件夾,再打開(kāi)我們剛剛所創(chuàng)建的爬蟲(chóng)文件
打開(kāi)后可以看到一個(gè)基礎(chǔ)的爬蟲(chóng)框架,我們要根據(jù)實(shí)際的需要來(lái)修改這個(gè)框架的內(nèi)容
上面有紅色箭頭的地方就是我們主要修改的地方
首先將第一個(gè)指向的地址換成我們想要爬取的地址,即阿里文學(xué)的官網(wǎng)首頁(yè)《?https://www.aliwx.com.cn/》
第二個(gè)地方就是我們?cè)O(shè)置爬取內(nèi)容的定制項(xiàng)
import scrapyclass AliwxSpider(scrapy.Spider):
name = 'aliwx'
allowed_domains = ['aliwx.com.cn']
start_urls = ['https://www.aliwx.com.cn/']
def parse(self, response):
#選擇所有a標(biāo)簽下的內(nèi)容
selectors = response.xpath("//ul[@class='list']/li[@class='tr']/a")
# 循環(huán)遍歷每一個(gè)a標(biāo)簽,使書(shū)名和最新章節(jié)可以一對(duì)一匹配
for selector in selectors:
#提取a標(biāo)簽下的書(shū)名 . 表示在當(dāng)前標(biāo)簽下繼續(xù)選擇
book_name = selector.xpath("./span[2]/text()").get()
#提取a標(biāo)簽下的最新章節(jié)名
book_new = selector.xpath("./span[3]/text()").get()
#打印書(shū)名和章節(jié)名
print(book_name,book_new)
4.設(shè)置settings
打開(kāi)settings文件,在文件中找到代碼
這一行的意思是詢問(wèn)是否遵循?爬蟲(chóng)協(xié)議?,大致來(lái)講就是協(xié)議規(guī)范了我們只能提取網(wǎng)站允許我們提取的內(nèi)容,所以此處應(yīng)該將True提換成False,否則我們很有可能提取不到想要的內(nèi)容
5.運(yùn)行scrapy框架
打開(kāi)終端,將目錄切換至項(xiàng)目文件夾下,輸入命令行來(lái)運(yùn)行項(xiàng)目
scrapy crawl [爬蟲(chóng)名]等待項(xiàng)目運(yùn)行完畢,即可看到爬取到的內(nèi)容:
6.將爬取下來(lái)的內(nèi)容保存到文件
如果想要將內(nèi)容保存到文件中,就需要設(shè)置一個(gè)返回值來(lái)儲(chǔ)存
將print(book_name,book_new)語(yǔ)句替換
items = {'name': book_name,
'new': book_new,
}
yield items
再打開(kāi)終端,輸入運(yùn)行并保存命令:
scrapy crawl aliwx -o book.csv等待程序運(yùn)行完成,就可以看到出現(xiàn)了一個(gè)book.csv文件在項(xiàng)目目錄下,打開(kāi)就是我們所保存的內(nèi)容
到此為止一個(gè)最基本的爬蟲(chóng)項(xiàng)目就制作完成了,如果有哪里寫(xiě)的不好請(qǐng)大佬多多批評(píng)指正!
源碼獲取加群:850591259
總結(jié)
以上是生活随笔為你收集整理的scrapy获取a标签的连接_Python爬虫 scrapy框架初探及实战!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何用计算机装手机系统,如何用手机usb
- 下一篇: python怎么启动mne_mne-py