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
#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中文維護站點:
project_name/scrapy.cfg注意:1. 一般建立爬蟲檔案時,以**網域名稱命名#專案的主配置資訊,用來部署scrapy時使用,爬蟲相關的配置資訊在settings.py檔案中。
project_name/
__init__
.py items.py
#設定資料儲存模板,用於結構化資料,如:django的model
pipelines.py #
專案管道檔案,如:一般結構化的資料持久化
settings.py #
spiders/ #
爬蟲目錄,如:建立檔案,編寫爬蟲規則
__init__
.py 爬蟲1.py
爬蟲2.py
爬蟲3.py
2. 預設只能在終端執行命令,為了更便捷操作:
如果想在pycharm中執行需要做:
#1.建立爬蟲應用程式在專案目錄下新建: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'])
scrapy startproject qiubai #2 編寫爬蟲檔案:在步驟2執行完畢後,會在專案的spiders中生成乙個應用名的py爬蟲檔案,檔案原始碼如下:建立專案
cd qiubai
#進入專案目錄
scrapy genspider qiubai www.qiushibaike.com
#應用名稱 爬取網頁的起始url
importscrapy
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 = ''#4 執行爬蟲程式:偽裝請求載體身份
robotstxt_obey = false #
可以忽略或者不遵守robots協議
scrapy crawl 爬蟲名稱 #今天是情人節,祝大家情人節快樂該種執行形式會顯示執行的日誌資訊
scrapy crawl 爬蟲名稱 --nolog #
該種執行形式不會顯示執行的日誌資訊
有物件的已經去跟物件去約會了,愛學習的才會跟**相伴(比如我)
print("好奇的去copy執行一下吧~\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)]))
Scrapy爬蟲框架介紹
scrapy是乙個為了爬取 資料,提取結構性資料而編寫的應用框架。可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了 頁面抓取 更確切來說,網路抓取 所設計的,也可以應用在獲取api所返回的資料 例如 amazon associates web services 或者通用的...
Scrapy爬蟲框架介紹
爬蟲框架是實現爬蟲功能的乙個軟體結構和功能元件集合。爬蟲框架是乙個半成品,能夠幫助使用者實現專業網路爬蟲。五個模組 spiders 爬蟲 解析 產生的相應 response 產生爬取項item,產生額外的爬取請求 requests scheduler 排程器 負責對爬取請求進行排程管理 可能同時有多...
python爬蟲框架scrapy介紹
scrapy,python開發的乙個快速,高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。scrapy用途廣泛,可以用於資料探勘 監測和 自動化測試。scrapy吸引人的地方在於它是乙個框架,任何人都可以根據需求方便的修改。它也提供了多種型別爬蟲的基類,如basesp...