接著上一節的scrapy環境搭建,這次我們開始長征的第二步,如果第一步的還沒走,請出門右轉(scrapy爬蟲框架環境搭建)
新建scrapy專案 專案名稱是scrapydemo
scrapy startproject scrapydemo然後回車,就會自動生成乙個專案骨架,如下圖:
然後我們寫爬蟲的**是在spiders裡面寫的。
編寫spiders裡面的爬蟲指令碼;demo如下,注釋都在**裡面
import scrapy
from myspider.items import myspideritem
class
nextspiderspider
(scrapy.spider)
: name =
"nextspider"
allowed_domains =
["lab.scrapyd.cn"
] start_urls =
['']def
parse
(self, response)
: content = response.css(
'div.quote'
)# 提取首頁所有名言,儲存至變數content
for v in content:
# 迴圈獲取每一條名言裡面的:名言內容、作者、標籤
text = v.css(
'.text::text'
).extract_first(
)# 提取名言
author = v.css(
'.author::text'
).extract_first(
)# 提取作者
tags = v.css(
'.tags .tag::text'
).extract(
)# 提取標籤
tags =
','.join(tags)
# 陣列轉換為字串
""" 接下來進行寫檔案操作,每個名人的名言儲存在乙個txt文件裡面
"""file_name =
'%s-語錄.txt'
% author # 定義檔名,如:木心-語錄.txt
item = myspideritem(
) item[
'text'
]= text
item[
'author'
]= author
item[
'tags'
]= tags
# 將爬取的資料寫成txt檔案
with
open
(file_name,
"a+"
)as f:
# 不同人的名言儲存在不同的txt文件,「a+」以追加的形式
f.write(text)
f.write(
'\n'
)# 『\n』 表示換行
f.write(
'標籤:'
+ tags)
f.write(
'\n-------\n'
) f.close(
)# scrapy crawl nextspider -o items.json -s feed_export_encoding=utf-8 將資料匯出來序列化變成json格式
yield item
# 我們需要繼續提交給parse執行關鍵看 scrapy 如何實現鏈結提交
next_page = response.css(
'li.next a::attr(href)'
).extract_first(
)if next_page is
notnone
:"""
如果是相對路徑,如:/page/1
urljoin能替我們轉換為絕對路徑,也就是加上我們的網域名稱
最終next_page為:page/2/
"""next_page = response.urljoin(next_page)
""" scrapy給我們提供了這麼乙個方法:scrapy.request()
這個方法還有許多引數,後面我們慢慢說,這裡我們只使用了兩個引數
當然,我們也可以在下面另寫乙個函式,比如:內容頁,專門處理內容頁的資料
"""yield scrapy.request(next_page, callback=self.parse)
scrapy爬蟲框架
作者經過幾周的python爬蟲實踐之後,深入學習了一下scrapy這個爬蟲框架,現將一些基本知識和 總結整理一下,以備後查。2.scrapy的命令列使用 這部分網上很多部落格都有總結,不需要背,理解會用主要的命令 startproject crawl fetch list genspider.即可,...
scrapy 爬蟲框架
1.安裝 公升級pip版本 pip install upgrade pip 通過pip安裝scrapy框架 pip install scrapy 安裝成功 只執行scrapy 進行測試是否安裝成功 2.scrapy startproject 爬蟲專案名稱 執行此命令,可以生成乙個爬蟲專案 會預先生成...
Scrapy爬蟲框架
scrapy中的各大元件及其功能 1.scrapy引擎 engine 引擎負責控制資料流在系統的所有元件中流動,並在相應動作發生時觸發事件。2.排程器 scheduler 排程器從引擎接收request並將它們入隊,以便之後引擎請求request時提供給引擎。4.spider。spider是scra...