scrapy的基本使用

scrapy框架

image.png
Scrapy Engine(引擎): 負責Spider、ItemPipeline兜看、Downloader锥咸、Scheduler中間的通訊,信號细移、數(shù)據傳遞等搏予。
Scheduler(調度器): 它負責接受引擎發(fā)送過來的Request請求,并按照一定的方式進行整理排列弧轧,入隊雪侥,當引擎需要時,交還給引擎精绎。
Downloader(下載器):負責下載Scrapy Engine(引擎)發(fā)送的所有Requests請求速缨,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理代乃,
Spider(爬蟲):它負責處理所有Responses,從中分析提取數(shù)據旬牲,獲取Item字段需要的數(shù)據,并將需要跟進的URL提交給引擎搁吓,再次進入Scheduler(調度器)原茅,

Item Pipeline(管道):它負責處理Spider中獲取到的Item,并進行進行后期處理(詳細分析堕仔、過濾擂橘、存儲等)的地方.

Downloader Middlewares(下載中間件):你可以當作是一個可以自定義擴展下載功能的組件。
Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests)
image.png

scrapy的項目的步驟

  • 1.scrapy startproject 爬蟲項目名稱

  • 2.(編寫items.py):明確你想要抓取的目標

items.py文件:自定義字段摩骨,確定要爬取的目標網站數(shù)據

import scrapy
class DoubanItem(scrapy.Item):

    # 標題
    title = scrapy.Field()
    # 是否可播放的狀態(tài)
    playable = scrapy.Field()
    # 簡介
    content = scrapy.Field()
    # 評分
    star = scrapy.Field()
    # 評論數(shù)量
    commentnum = scrapy.Field()
    # 主題
    inq = scrapy.Field()

spiders/douban.py 文件: 爬蟲文件,在這里編寫爬蟲代碼通贞,解析數(shù)據,獲取新的url
name:是項目的名字
allowed_domains:是允許爬取的域名仿吞,比如一些網站有相關鏈接滑频,域名就和本網站不同,這些就會忽略唤冈。

settings.py文件: 設置文件峡迷,在這里設置User-Agent,激活管道文件等...
pipelines.py管道:這里進行數(shù)據的清洗和持久化

  • 3.scrapy genspider 爬蟲文件名稱 域名:制作爬蟲開始爬取網頁

  • 4. 存儲內容

pipelines.py):設計管道存儲爬取內容

通過pip安裝scrapy

pip3 install Scrapy
image.png

scrapy通用爬蟲

scrapy genspider -t crawl 爬蟲文件 域名
它是Spider的派生類,Spider類的設計原則是只爬取start_url列表中的網頁你虹,而CrawlSpider類定義了一些規(guī)則Rule來提供跟進鏈接的方便的機制绘搞,從爬取的網頁結果中獲取鏈接并繼續(xù)爬取的工作.

CrawlSpider使用rules屬性來決定爬蟲的爬取規(guī)則,并將匹配后的url請求提交給引擎,完成后續(xù)的爬取工作傅物。
在rules中包含一個或多個Rule對象夯辖,每個Rule對爬取網站的動作定義了某種特定操作,比如提取當前相應內容里的特定鏈接董饰,是否對提取的鏈接跟進爬取蒿褂,對提交的請求設置回調函數(shù)等圆米。如果多個rule匹配了相同的鏈接,則根據規(guī)則在本集合中被定義的順序啄栓,第一個會被使用娄帖。
Link Extractors 的目的很簡單: 提取鏈接?
每個LinkExtractor有唯一的公共方法是 extract_links(),它接收一個 Response 對象昙楚,并返回一個 scrapy.link.Link 對象近速。
Link Extractors要實例化一次,并且 extract_links 方法會根據不同的 response 調用多次提取鏈接?
link_extractor:是一個Link Extractor對象堪旧,用于定義需要提取的鏈接削葱。
callback: 從link_extractor中每獲取到鏈接得到Responses時,會調用參數(shù)所指定的值作為回調函數(shù)淳梦,該回調函數(shù)接收一個response作為其一個參數(shù)析砸。
follow:是一個布爾(boolean)值,指定了根據該規(guī)則從response提取的鏈接是否需要跟進谭跨。如果callback為None干厚,follow 默認設置為True ,否則默認為False螃宙。
process_links:指定spider中哪個的函數(shù)將會被調用蛮瞄,從link_extractor中獲取到鏈接列表時將會調用該函數(shù)。該方法主要用來過濾谆扎。
process_request:指定處理函數(shù)挂捅,根據該Rule提取到的每個Request時,該函數(shù)將會被調用堂湖,可以對Request進行處理闲先,該函數(shù)必須返回Request或者None
爬取規(guī)則(Crawling rules

第一步:根據要爬取的網頁確定需要保存的字段
第二步:編寫爬蟲類 ,LinkExtractor實例對象

request請求和response響應

 url: 就是需要請求,并進行下一步處理的url

callback: 指定該請求返回的Response无蜂,由那個函數(shù)來處理伺糠。

method: 請求一般不需要指定,默認GET方法斥季,可設置為"GET", "POST", "PUT"等训桶,且保證字符串大寫

headers: 請求時,包含的頭文件酣倾。一般不需要舵揭。內容一般如下: # 自己寫過爬蟲的肯定知道 Host: [media.readthedocs.org](http://media.readthedocs.org/)User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accept: text/css,*/*;q=0.1 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: [http://scrapy-chs.readthedocs.org/zh_CN/0.24/](http://scrapy-chs.readthedocs.org/zh_CN/0.24/) Cookie: _ga=GA1.2.1612165614.1415584110; Connection: keep-alive If-Modified-Since: Mon, 25 Aug 2014 21:59:35 GMT Cache-Control: max-age=0
meta: 比較常用,在不同的請求之間傳遞數(shù)據使用的躁锡。字典dict型
 request_with_cookies = Request(
          url="http://www.example.com",
          cookies={'currency': 'USD', 'country': 'UY'},
          meta={'dont_merge_cookies': True}
      )
encoding: 使用默認的 'utf-8' 就行午绳。
dont_filter: 表明該請求不由調度器過濾。這是當你想使用多次執(zhí)行相同的請求,忽略重復的過濾器映之。默認為False拦焚。
errback: 指定錯誤處理函數(shù)

response響應

status: 響應碼
_set_body(body): 響應體
_set_url(url):響應url
self.request = request (request對象)
self.headers = Headers (響應頭)

如何使用shell

Scrapy Shell根據下載的頁面會自動創(chuàng)建一些方便使用的對象蜡坊,例如 Response 對象,以及 Selector 對象 (對HTML及XML內容)耕漱。

######運行shell:scrapy shell "http://hr.tencent.com/position.php?&start=0#a"
scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36"  "http://hr.tencent.com/position.php?&start=0#a"

Selectors選擇器 Scrapy Selectors 內置 XPath 和 CSS Selector 表達式機制 Selector有四個基本的方法算色,最常用的還是xpath:

xpath(): 傳入xpath表達式,返回該表達式所對應的所有節(jié)點的selector list列表
extract(): 序列化該節(jié)點為字符串并返回list
css(): 傳入CSS表達式螟够,返回該表達式所對應的所有節(jié)點的selector list列表,語法同 BeautifulSoup4
re(): 根據傳入的正則表達式對數(shù)據進行提取峡钓,返回字符串list列表

數(shù)據庫永久化保持

items.py文件:自定義字段妓笙,確定要爬取的目標網站數(shù)據
spiders/douban.py 文件: 爬蟲文件,在這里編寫爬蟲代碼,解析數(shù)據能岩,獲取新的url

init() : 初始化爬蟲名字和start_urls列表

start_requests() 調用
make_requests_from url():生成Requests對象交給Scrapy下載并返回response
parse():

解析response寞宫,并返回Item或Requests(需指定回調函數(shù))。
Item傳給Item pipline持久化 拉鹃, 而Requests交由Scrapy下載辈赋,并由指定的回調函數(shù)處理(默認parse())昆码,一直進行循環(huán)儒飒,直到處理完所有的數(shù)據為止贮喧。

settings.py文件: 設置文件膏执,在這里設置User-Agent,激活管道文件等...
pipelines.py管道:這里進行數(shù)據的清洗和持久化

運行文件

scrapy crawl 項目名稱
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末米母,一起剝皮案震驚了整個濱河市枕稀,隨后出現(xiàn)的幾起案子弟翘,更是在濱河造成了極大的恐慌命斧,老刑警劉巖近忙,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竭业,死亡現(xiàn)場離奇詭異,居然都是意外死亡及舍,警方通過查閱死者的電腦和手機未辆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锯玛,“玉大人咐柜,你說我怎么就攤上這事「瘢” “怎么了炕桨?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肯腕。 經常有香客問我献宫,道長,這世上最難降的妖魔是什么实撒? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任姊途,我火速辦了婚禮涉瘾,結果婚禮上,老公的妹妹穿的比我還像新娘捷兰。我一直安慰自己立叛,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布贡茅。 她就那樣靜靜地躺著秘蛇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顶考。 梳的紋絲不亂的頭發(fā)上赁还,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音驹沿,去河邊找鬼艘策。 笑死,一個胖子當著我的面吹牛渊季,可吹牛的內容都是我干的朋蔫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼却汉,長吁一口氣:“原來是場噩夢啊……” “哼驯妄!你這毒婦竟也來了?” 一聲冷哼從身側響起病涨,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤富玷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后既穆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赎懦,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年幻工,在試婚紗的時候發(fā)現(xiàn)自己被綠了励两。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡囊颅,死狀恐怖当悔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情踢代,我是刑警寧澤盲憎,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站胳挎,受9級特大地震影響饼疙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜慕爬,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一窑眯、第九天 我趴在偏房一處隱蔽的房頂上張望屏积。 院中可真熱鬧,春花似錦磅甩、人聲如沸炊林。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渣聚。三九已至,卻和暖如春却妨,著一層夾襖步出監(jiān)牢的瞬間饵逐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工彪标, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掷豺。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓捞烟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親当船。 傳聞我的和親對象是個殘疾皇子题画,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容