Scrapy爬蟲(chóng)框架使用

keywords:python scrapy crawl mysql git 建材 爬蟲(chóng)

之前爬取過(guò)指定建材網(wǎng)站的指定內(nèi)容砸泛,調(diào)研分析采用scrapy框架來(lái)做:框架簡(jiǎn)單阅畴,功能強(qiáng)大棒坏。 scrapy中文官網(wǎng) http://scrapy-chs.readthedocs.io/zh_CN/latest/

寫的scrapy代碼爬取大概1億條數(shù)據(jù),特別是對(duì)于淘寶或者大眾點(diǎn)評(píng)這類的數(shù)據(jù)量很大,前前后后大概花了一個(gè)月的業(yè)余時(shí)間(羽毛球沒(méi)敢丟下)檩禾。爬取建材網(wǎng)站代碼github地址https://github.com/junfeng-feng/Spider.git

首先要分析需求旺入,要那些數(shù)據(jù)兑凿,get/post分頁(yè)分類獲取,其次防止被ban茵瘾,最后數(shù)據(jù)交付礼华。

分析網(wǎng)站

分析網(wǎng)站,最常用的就是使用firefox或者chrome拗秘,F(xiàn)12查看網(wǎng)頁(yè)源代碼圣絮,然后F5刷新頁(yè)面,查看有哪些網(wǎng)絡(luò)(network)請(qǐng)求雕旨,請(qǐng)求的類型及內(nèi)容扮匠。

最多使用的就是翻頁(yè)數(shù)據(jù)的請(qǐng)求捧请,一部分是通過(guò)get請(qǐng)求的url帶上類似PageNo的參數(shù),另外一個(gè)部分就是通過(guò)post json棒搜,json的數(shù)據(jù)含有PageNo類似的字段疹蛉。

抓取網(wǎng)站

scrapy可深度優(yōu)先,或者廣度優(yōu)先力麸,且自帶去重功能可款,自帶過(guò)濾域名等等強(qiáng)大的功能。

由于我們想要抓取的數(shù)據(jù)都是指定的克蚂,比如http://ask.jia.com/裝修問(wèn)答網(wǎng)站中筑舅,問(wèn)答的題目,問(wèn)題描述陨舱,問(wèn)題圖片翠拣;回答的圖片,最佳回答游盲,回答的時(shí)間等等需求方指定的要素误墓。所以我們爬取過(guò)程中,不能采用通用爬蟲(chóng)益缎。

實(shí)際的爬取做法谜慌,簡(jiǎn)單粗暴:分析對(duì)應(yīng)問(wèn)答的頁(yè)面,預(yù)估數(shù)據(jù)數(shù)量莺奔,指定所有的url欣范。比如http://ask.jia.com/a-1006161.html其中,1006161是問(wèn)答的id令哟,我們的做法就是遍歷所有的id恼琼,具體id范圍1-200000000,來(lái)抓取問(wèn)答詳情頁(yè)面屏富。代碼樣例:

start_urls = [] #scrapy的起始url

for id in xrange(1, 2000000):#todo

? ? start_urls.append("http://ask.jia.com/a-%s.html" % id)

分析具體的頁(yè)面

http://ask.jia.com/a-1006161.html為例晴竞,獲取問(wèn)題的標(biāo)題。

使用item["question_title"]="".join(select.css(".timu_text").xpath(".//h1/text()").extract()).strip()狠半,其中item是scrapy中簡(jiǎn)單的容器噩死,定義pipeline中的數(shù)據(jù)項(xiàng)。解析html使用Selector神年,解析html有很多種比如lxml或者BeautifulSoap等已维,但是scrapy使用自己的一條機(jī)制Selector簡(jiǎn)單高效。詳細(xì)的語(yǔ)法可以參考scrapy文檔已日。

最方便的工具是scrapy shell垛耳,可以在終端打開(kāi)scrapy shell,然后在命令行,一個(gè)個(gè)字段來(lái)調(diào)試分析艾扮。不用每次都啟動(dòng)scrapy crawl來(lái)跑完程序驗(yàn)證抓取的字段是否正確既琴。在shell中一個(gè)個(gè)調(diào)試select.css去的是否正確。(分析具體頁(yè)面需要注意:1.頁(yè)面可能存在特殊性泡嘴,所以需要找多個(gè)頁(yè)面先對(duì)比 2.需要處理沒(méi)有字段的異常情況甫恩,對(duì)于空字段置為空即可)

多級(jí)請(qǐng)求

抓取網(wǎng)站具體內(nèi)容,會(huì)遇到一個(gè)問(wèn)題:一條完整的數(shù)據(jù)酌予,需要多個(gè)網(wǎng)絡(luò)請(qǐng)求get/post按照順序一個(gè)個(gè)來(lái)收集磺箕。

這時(shí)scrapy中的request=Request(brandUrl,callback=self.brandJsonCallBack,priority=1234567)再yieldrequest,在callback中收集數(shù)據(jù)持久化數(shù)據(jù)抛虫,是再合適不過(guò)松靡。樣例請(qǐng)參考github中的tmall代碼。

存儲(chǔ)圖片

scrapy存儲(chǔ)圖片比較簡(jiǎn)單建椰,在setting.py配置 pipeline添加'scrapy.pipelines.images.ImagesPipeline': 1雕欺,同時(shí)配置IMAGES_STORE=r'./img'存儲(chǔ)圖片位置,然后在spider解析頁(yè)面拿到要下載圖片的url添加到item["image_urls"],scrapy就下載圖片棉姐,同時(shí)保存圖片的id在item中屠列,其它請(qǐng)參考scapy文檔。

持久化數(shù)據(jù)

使用twisted和MysqlDb伞矩,在pipeline.py中將item插入數(shù)據(jù)庫(kù)笛洛。其中數(shù)據(jù)庫(kù)鏈接相關(guān)信息配置在settings.py

防止被ban

最有效的方式是設(shè)置下載延遲DOWNLOAD_DELAY=0.1,同時(shí)禁用cookie乃坤。

其它比如設(shè)置user-agent苛让,比如使用TOR,或者使用IP池湿诊,都不怎么好使狱杰。想要防止被禁的其它方法請(qǐng)自行g(shù)oogle。

數(shù)據(jù)清洗

抓取到數(shù)據(jù)后需要做一些處理枫吧,因?yàn)槲覀冏ト〉亩际翘囟ǖ膬?nèi)容浦旱,基本沒(méi)有特別的處理宇色。

Python基礎(chǔ)安裝使用

推薦使用Python 27九杂,不推薦Python3

python 非root安裝:./configure [--prefix=newpath](自己指定安裝路徑) && make && make install

setuptools 安裝

pip install:pip是Python安裝第三方包最方便的工具,會(huì)自動(dòng)下載依賴

pip 國(guó)內(nèi)鏡像:pip install -ihttps://pypi.douban.com/simple/

pip 使用代理: pip --proxy=http://127.0.0.1:2048

pip 安裝包到指定目錄: pip install --install-option="--prefix=$PREFIX_PATH" package_name

python 字符編碼處理 print file file.write請(qǐng)參考http://www.reibang.com/p/53bb448fe85b

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣蠕,一起剝皮案震驚了整個(gè)濱河市例隆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抢蚀,老刑警劉巖镀层,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唱逢,警方通過(guò)查閱死者的電腦和手機(jī)吴侦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坞古,“玉大人备韧,你說(shuō)我怎么就攤上這事』痉悖” “怎么了织堂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奶陈。 經(jīng)常有香客問(wèn)我易阳,道長(zhǎng),這世上最難降的妖魔是什么吃粒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任潦俺,我火速辦了婚禮,結(jié)果婚禮上徐勃,老公的妹妹穿的比我還像新娘黑竞。我一直安慰自己,他們只是感情好疏旨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布很魂。 她就那樣靜靜地躺著,像睡著了一般檐涝。 火紅的嫁衣襯著肌膚如雪遏匆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天谁榜,我揣著相機(jī)與錄音幅聘,去河邊找鬼。 笑死窃植,一個(gè)胖子當(dāng)著我的面吹牛帝蒿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巷怜,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼葛超,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了延塑?” 一聲冷哼從身側(cè)響起绣张,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎关带,沒(méi)想到半個(gè)月后侥涵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年芜飘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了务豺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗦明,死狀恐怖冲呢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情招狸,我是刑警寧澤敬拓,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站裙戏,受9級(jí)特大地震影響乘凸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜累榜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一营勤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壹罚,春花似錦葛作、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至辨泳,卻和暖如春虱岂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背菠红。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工第岖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人试溯。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓蔑滓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親遇绞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子键袱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容