python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门
前言
轉行做python程序員已經有三個月了,這三個月用Scrapy爬蟲框架寫了將近兩百個爬蟲,不能說精通了Scrapy,但是已經對Scrapy有了一定的熟悉。準備寫一個系列的Scrapy爬蟲教程,一方面通過輸出鞏固和梳理自己這段時間學到的知識,另一方面當初受惠于別人的博客教程,我也想通過這個系列教程幫助一些想要學習Scrapy的人。
Scrapy簡介Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
其最初是為了 頁面抓取 (更確切來說, 網絡抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。
架構概覽
各組件作用
Scrapy Engine引擎負責控制數據流在系統中所有組件中流動,并在相應動作發生時觸發事件。 詳細內容查看下面的數據流(Data Flow)部分。
此組件相當于爬蟲的“大腦”,是整個爬蟲的調度中心。
調度器(Scheduler)調度器從引擎接受request并將他們入隊,以便之后引擎請求他們時提供給引擎。
初始的爬取URL和后續在頁面中獲取的待爬取的URL將放入調度器中,等待爬取。同時調度器會自動去除重復的URL(如果特定的URL不需要去重也可以通過設置實現,如post請求的URL)
下載器(Downloader)下載器負責獲取頁面數據并提供給引擎,而后提供給spider。
SpidersSpider是Scrapy用戶編寫用于分析response并提取item(即獲取到的item)或額外跟進的URL的類。 每個spider負責處理一個特定(或一些)網站。
Item PipelineItem Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存取到數據庫中)。
當頁面被爬蟲解析所需的數據存入Item后,將被發送到項目管道(Pipeline),并經過幾個特定的次序處理數據,最后存入本地文件或存入數據庫。
下載器中間件(Downloader middlewares)下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。
通過設置下載器中間件可以實現爬蟲自動更換user-agent、IP等功能。
Spider中間件(Spider middlewares)Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。
數據流(Data flow)引擎打開一個網站(open a domain),找到處理該網站的Spider并向該spider請求第一個要爬取的URL(s)。
引擎從Spider中獲取到第一個要爬取的URL并在調度器(Scheduler)以Request調度。
引擎向調度器請求下一個要爬取的URL。
調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
一旦頁面下載完畢,下載器生成一個該頁面的Response,并將其通過下載中間件(返回(response)方向)發送給引擎。
引擎從下載器中接收到Response并通過Spider中間件(輸入方向)發送給Spider處理。
Spider處理Response并返回爬取到的Item及(跟進的)新的Request給引擎。
引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
(從第二步)重復直到調度器中沒有更多地request,引擎關閉該網站。
建立Scrapy爬蟲項目流程
創建項目
在開始爬取之前,首先要創建一個新的Scrapy項目。這里以爬取我的博客為例,進入你打算存儲代碼的目錄中,運行下列命令:
scrapy startproject scrapyspider
該命令將會創建包含下列內容的scrapyspider目錄:
scrapyspider/
scrapy.cfg
scrapyspider/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
這些文件分別是:scrapy.cfg: 項目的配置文件。
scrapyspider/: 該項目的python模塊。之后您將在此加入代碼。
scrapyspider/items.py: 項目中的item文件。
scrapyspider/pipelines.py: 項目中的pipelines文件。
scrapyspider/settings.py: 項目的設置文件。
scrapyspider/spiders/: 放置spider代碼的目錄。
編寫第一個爬蟲(Spider)Spider是用戶編寫用于從單個網站(或者一些網站)爬取數據的類。
其包含了一個用于下載的初始URL,如何跟進網頁中的鏈接以及如何分析頁面中的內容, 提取生成 item 的方法。
為了創建一個Spider,您必須繼承 scrapy.Spider 類, 且定義以下三個屬性:name: 用于區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。
start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 后續的URL則從初始的URL獲取到的數據中提取。
parse() 是spider的一個方法。 被調用時,每個初始URL完成下載后生成的 Response 對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的 Request 對象。
以下為我們的第一個Spider代碼,保存在scrapyspider/spiders目錄下的blog_spider.py文件中:
from scrapy.spiders import Spider
class BlogSpider(Spider):
name = 'woodenrobot'
start_urls = ['http://woodenrobot.me']
def parse(self, response):
titles = response.xpath('//a[@class="post-title-link"]/text()').extract()
for title in titles:
print title.strip()
啟動爬蟲
打開終端進入項目所在路徑(即:scrapyspider路徑下)運行下列命令:
scrapy crawl woodenrobot
啟動爬蟲后就可以看到打印出來當前頁所有文章標題了。
Ps:這一篇教程里就先簡單介紹這么多,有好多東西我還沒想好這么講。期待后面的干貨吧!
總結
以上是生活随笔為你收集整理的python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特斯拉不好惹!网红车评人“蔡老板”被判道
- 下一篇: 小米申请 AR 眼镜新专利,可识别二维码