scrapy 框架

class RandomProxiesDownloadmidderware(object):

? ? def __init__(self, proxies):

? ? ? ? self.proxies= proxies

@classmethod

? ? def from_crawler(cls, crawler):

? ? ? ? proxies= crawler.sittings['PROXIES']

? ? ? ? return cls(proxies)

? ? def process_request(self, spider, request):

? ? ? ? dict_proxy = random.choice(self.proxies)

REQUEST

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

callback: 指定該請求返回的Response套媚,由那個函數(shù)來處理猜憎。

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

headers: 請求時撑刺,包含的頭文件爸吮。一般不需要。內容一般如下:# 自己寫過爬蟲的肯定知道Host:media.readthedocs.orgUser-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0Accept: text/css,/;q=0.1Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateReferer:http://scrapy-chs.readthedocs.org/zh_CN/0.24/Cookie: _ga=GA1.2.1612165614.1415584110;Connection: keep-aliveIf-Modified-Since: Mon, 25 Aug 2014 21:59:35 GMTCache-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 (響應頭)

scrapy框架

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)

安裝方式? sudo pip3 install scrapy

新建項目

????????? scrapy startproject 爬蟲項目名稱

???????? 進入項目涕烧,再次進入項目文件夾月而,在進入spdeers執(zhí)行以下命令

?????????????????? scrapy genspider 爬蟲文件名稱 域名

????? 使用pycharm打開,配置 虛擬環(huán)境议纯,配置需要的settings,在爬蟲文件中爬取所需要的數(shù)據父款,以及起始的url,在items中定義字段

???? yield 的作用就是把一個函數(shù)變成一個 generator(生成器)瞻凤,帶有 yield 的函數(shù)不再是一個普通函數(shù)憨攒,Python 解釋器會將其視為一個????? generator,帶有yeild的函數(shù)遇到y(tǒng)eild的時候就返回一個迭代值阀参,下次迭代時肝集,代碼從 yield 的下一條語句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來和上次中斷執(zhí)行前是完全一樣的蛛壳,于是函數(shù)繼續(xù)執(zhí)行包晰,直到再次遇到 yield。

scrapy crawl 項目名稱啟動項目

數(shù)據持久化炕吸,也就是將爬取到的數(shù)據存放到數(shù)據庫中,一般有mysql mongod redis, 想要存放數(shù)據勉痴,首先要激活管道文件赫模,在settings中items打開

# 將數(shù)據存儲在mongodb中

? ? def __init__(self,host,port,dbname,sheetname):

? ? ? ? # 創(chuàng)建MONGODB數(shù)據庫鏈接

? ? ? ? client = pymongo.MongoClient(host=host, port=port)

? ? ? ? # 指定數(shù)據庫

? ? ? ? mydb = client[dbname]

? ? ? ? # 存放數(shù)據的數(shù)據庫表名

? ? ? ? self.mysheet = mydb[sheetname]

? ? @classmethod

? ? def from_crawler(cls, crawler):

? ? ? ? host = crawler.settings["MONGODB_HOST"]

? ? ? ? port = crawler.settings["MONGODB_PORT"]

? ? ? ? dbname = crawler.settings["MONGODB_DBNAME"]

? ? ? ? sheetname = crawler.settings["MONGODB_SHEETNAME"]


? ? ? ? return cls(host,port,dbname,sheetname)

? ? def process_item(self,item,spider):

? ? ? ? data = dict(item)

? ? ? ? # mongodb數(shù)據插入語句,使用save保存數(shù)據的效率會很慢蒸矛,因為它需要循環(huán)便利瀑罗,操作費時

? ? ? ? self.mysheet.insert(data)

? ? ? ? return item

通用爬蟲

scrapy genspider -t crawl 爬蟲文件 域名

rules

CrawlSpider使用rules屬性來決定爬蟲的爬取規(guī)則胸嘴,并將匹配后的url請求提交給引擎,完成后續(xù)的爬取工作。

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

主要參數(shù):

allow:滿足括號中“正則表達式”的URL會被提取,如果為空芥牌,則全部匹配烦味。

deny:滿足括號中“正則表達式”的URL一定不提取(優(yōu)先級高于allow)壁拉。

allow_domains:會提取的鏈接的domains谬俄。

deny_domains:一定不會被提取鏈接的domains。

restrict_xpaths:使用xpath表達式弃理,和allow共同作用過濾鏈接溃论。

第一步:根據要爬取的網頁確定需要保存的字段

第二步:編寫爬蟲類

LinkExtractor實例對象

LinkExtractor方法中的常用的參數(shù)

allow : LinkExtractor對象最重要的參數(shù)之一,這是一個正則表達式痘昌,必須要匹配這個正則表達式(或正則表達式列表)的URL才會被提取钥勋,如果沒有給出(或為空), 它會匹配所有的鏈接?

deny : 用法同allow,只不過與這個正則表達式匹配的URL不會被提取)?它的優(yōu)先級高于 - allow 的參數(shù)辆苔,如果沒有給出(或None), 將不排除任何鏈接?

allow_domains:包含了spider允許爬取的域名(domain)列表(list)

deny_domains=():包含了spider不允許爬取的域名(domain)列表(list)

通用爬蟲的起始url不會獲得響應算灸,如果需要,需要重現(xiàn)def parse_start_url(self, response):方法

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末驻啤,一起剝皮案震驚了整個濱河市菲驴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骑冗,老刑警劉巖赊瞬,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件先煎,死亡現(xiàn)場離奇詭異,居然都是意外死亡巧涧,警方通過查閱死者的電腦和手機薯蝎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谤绳,“玉大人占锯,你說我怎么就攤上這事∶乒” “怎么了烟央?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歪脏。 經常有香客問我疑俭,道長,這世上最難降的妖魔是什么婿失? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任钞艇,我火速辦了婚禮,結果婚禮上豪硅,老公的妹妹穿的比我還像新娘哩照。我一直安慰自己,他們只是感情好懒浮,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布飘弧。 她就那樣靜靜地躺著,像睡著了一般砚著。 火紅的嫁衣襯著肌膚如雪次伶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天稽穆,我揣著相機與錄音冠王,去河邊找鬼。 笑死舌镶,一個胖子當著我的面吹牛柱彻,可吹牛的內容都是我干的。 我是一名探鬼主播餐胀,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼哟楷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了否灾?” 一聲冷哼從身側響起卖擅,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后磨镶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡健提,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年琳猫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片私痹。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡脐嫂,死狀恐怖,靈堂內的尸體忽然破棺而出紊遵,到底是詐尸還是另有隱情账千,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布暗膜,位于F島的核電站匀奏,受9級特大地震影響,放射性物質發(fā)生泄漏学搜。R本人自食惡果不足惜娃善,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瑞佩。 院中可真熱鬧聚磺,春花似錦、人聲如沸炬丸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稠炬。三九已至焕阿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酸纲,已是汗流浹背捣鲸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留闽坡,地道東北人栽惶。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像疾嗅,于是被迫代替她去往敵國和親外厂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容