日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门

發布時間:2023/12/19 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。