爬蟲之Scrapy框架介紹

2022-05-17 10:53:22 字數 4773 閱讀 3329

scrapy是用純python實現乙個為了爬取**資料、提取結構性資料而編寫的應用框架,用途非常廣泛。

框架的力量,使用者只需要定製開發幾個模組就可以輕鬆的實現乙個爬蟲,用來抓取網頁內容以及各種,非常之方便。

scrapy engine(引擎): 用來處理整個系統的資料流處理, 觸發事務(框架核心)

scheduler(排程器): 用來接受引擎發過來的請求, 壓入佇列中, 並在引擎再次請求的時候返回. 可以想像成乙個url(抓取網頁的**或者說是鏈結)的優先佇列, 由它來決定下乙個要抓取的**是什麼, 同時去除重複的**

spider(爬蟲):爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的資訊, 即所謂的實體(item)。使用者也可以從中提取出鏈結,讓scrapy繼續抓取下乙個頁面

item pipeline(管道):負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的資訊。當頁面被爬蟲解析後,將被傳送到專案管道,並經過幾個特定的次序處理資料。

spider middlewares(排程中介軟體):介於scrapy引擎和排程之間的中介軟體,從scrapy引擎傳送到排程的請求和響應。

首先,引擎從排程器中取出乙個鏈結(url)用於接下來的抓取

然後,爬蟲解析response

若是解析出實體(item),則交給實體管道進行進一步的處理。

若是解析出的是鏈結(url),則把url交給scheduler等待抓取

pip3 install scrapy

#

1. pip3 install wheel##

#4. pip3 install pywin32

#5. pip3 install scrapy

#

1 檢視幫助

scrapy -h

scrapy -h#

2 有兩種命令:其中project-only必須切到專案資料夾下才能執行,而global的命令則不需要

global commands:

startproject

#建立專案

genspider #

建立爬蟲程式

settings #

如果是在專案目錄下,則得到的是該項目的配置

runspider #

執行乙個獨立的python檔案,不必建立專案

shell #

scrapy shell url位址 在互動式除錯,如選擇器規則正確與否

fetch #

獨立於程單純地爬取乙個頁面,可以拿到請求頭

view #

version #

scrapy version 檢視scrapy的版本,scrapy version -v檢視scrapy依賴庫的版本

project-only commands:

crawl

#執行爬蟲,必須建立專案才行,確保配置檔案中robotstxt_obey = false

check #

檢測專案中有無語法錯誤

list #

列出專案中所包含的爬蟲名

edit #

編輯器,一般不用

parse #

scrapy parse url位址 --callback **函式 #以此可以驗證我們的**函式是否正確

bench #

scrapy bentch壓力測試

scrapy框架****:

scrapy中文維護站點:

project_name/scrapy.cfg  

#專案的主配置資訊,用來部署scrapy時使用,爬蟲相關的配置資訊在settings.py檔案中。

project_name/

__init__

.py items.py

#設定資料儲存模板,用於結構化資料,如:django的model

pipelines.py #

專案管道檔案,如:一般結構化的資料持久化

settings.py #

spiders/ #

爬蟲目錄,如:建立檔案,編寫爬蟲規則

__init__

.py 爬蟲1.py

爬蟲2.py

爬蟲3.py

注意:1. 一般建立爬蟲檔案時,以**網域名稱命名

2. 預設只能在終端執行命令,為了更便捷操作:

如果想在pycharm中執行需要做:

#

在專案目錄下新建:entrypoint.py

from scrapy.cmdline import

execute

#execute(['scrapy', 'crawl', 'amazon','--nolog']) #不要日誌列印

#execute(['scrapy', 'crawl', 'amazon'])

#我們可能需要在命令行為爬蟲程式傳遞引數,就用下面這樣的命令

#acrapy crawl amzaon -a keyword=iphone8

execute(['

scrapy

', '

crawl

', '

amazon1

','-a

','keyword=iphone8

','--nolog

']) #

不要日誌列印

#execute(['scrapy', 'crawl', 'amazon1'])

1.建立爬蟲應用程式

scrapy startproject qiubai  #

建立專案

cd qiubai

#進入專案目錄

scrapy genspider qiubai www.qiushibaike.com

#應用名稱 爬取網頁的起始url

2 編寫爬蟲檔案:在步驟2執行完畢後,會在專案的spiders中生成乙個應用名的py爬蟲檔案,檔案原始碼如下:

import

scrapy

class

qiubaispider(scrapy.spider):

name = '

qiubai'#

應用名稱

#允許爬取的網域名稱(如果遇到非該網域名稱的url則爬取不到資料)

allowed_domains = ['

']start_urls = ['

'] #

起始爬取的url

defparse(self, response):

#xpath為response中的方法,可以將xpath表示式直接作用於該函式中

odiv = response.xpath('

//div[@id="content-left"]/div')

content_list = #

用於儲存解析到的資料

for div in

odiv:

#xpath函式返回的為列表,列表中存放的資料為selector型別的資料。我們解析到的內容被封裝在了selector物件中,需要呼叫extract()函式將解析的內容從selecor中取出。

author = div.xpath('

.//div[@class="author clearfix"]/a/h2/text()

')[0].extract()

content=div.xpath('

.//div[@class="content"]/span/text()

')[0].extract()

#將解析到的內容封裝到字典中

dic=

#將資料儲存到content_list這個列表中

return content_list

user_agent = ''#

偽裝請求載體身份

robotstxt_obey = false #

可以忽略或者不遵守robots協議

4 執行爬蟲程式:

scrapy crawl 爬蟲名稱  #

該種執行形式會顯示執行的日誌資訊

scrapy crawl 爬蟲名稱 --nolog #

該種執行形式不會顯示執行的日誌資訊

今天是情人節,祝大家情人節快樂

有物件的已經去跟物件去約會了,愛學習的才會跟**相伴(比如我)

print("

\n".join([''.join([('

love

'[(x-y) % len('

love

')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else

'') for x in range(-30, 30)]) for y in range(30, -30, -1)]))

好奇的去copy執行一下吧~

Scrapy爬蟲框架介紹

scrapy是乙個為了爬取 資料,提取結構性資料而編寫的應用框架。可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了 頁面抓取 更確切來說,網路抓取 所設計的,也可以應用在獲取api所返回的資料 例如 amazon associates web services 或者通用的...

Scrapy爬蟲框架介紹

爬蟲框架是實現爬蟲功能的乙個軟體結構和功能元件集合。爬蟲框架是乙個半成品,能夠幫助使用者實現專業網路爬蟲。五個模組 spiders 爬蟲 解析 產生的相應 response 產生爬取項item,產生額外的爬取請求 requests scheduler 排程器 負責對爬取請求進行排程管理 可能同時有多...

python爬蟲框架scrapy介紹

scrapy,python開發的乙個快速,高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。scrapy用途廣泛,可以用於資料探勘 監測和 自動化測試。scrapy吸引人的地方在於它是乙個框架,任何人都可以根據需求方便的修改。它也提供了多種型別爬蟲的基類,如basesp...