Python 3 爬蟲學習筆記 (五)

這是我自己在學習python 3爬蟲時的小筆記副签,做備忘用,難免會有一些錯誤和疏漏,望指正~~~
Python 3 爬蟲學習筆記 (一)
Python 3 爬蟲學習筆記 (二)
Python 3 爬蟲學習筆記 (三)
Python 3 爬蟲學習筆記 (四)
Python 3 爬蟲學習筆記 (六)


六、Scrapy初體驗

之前大概學習了下通過urllib和Beautiful Soup 進行簡單數(shù)據(jù)爬取的流程蜕径,但是那只適用于一些簡單的、數(shù)據(jù)量比較小的爬蟲項目街州,如果需要爬取的數(shù)據(jù)量比較大的話评甜,之前的方法必定非常緩慢,所以就有了Scrapy炬搭,Scrapy是一個快速的web抓取框架蜈漓,可抓取web站點并從頁面中提取結構化的數(shù)據(jù)。Scrapy給我們提供了許多的爬蟲基類宫盔,我們可以直接繼承使用融虽,當然,既然Scrapy是一個框架灼芭,我們也可以根據(jù)自己的需要對它進行修改有额,下面我們就慢慢來看Scrapy的使用。

Scrapy is an application framework for crawling web sites and extracting structured data which can be used for a wide range of useful applications, like data mining, information processing or historical archival.
Even though Scrapy was originally designed for web scraping, it can also be used to extract data using APIs (such as Amazon Associates Web Services ) or as a general purpose web crawler.

(一)安裝(Windows)

Scrapy是純Python編寫的彼绷,所以需要一些比較重要的的Python依賴包:

  • lxml, an efficient XML and HTML parser
  • parsel, an HTML/XML data extraction library written on top of lxml,
  • w3lib, a multi-purpose helper for dealing with URLs and web page encodings
  • twisted, an asynchronous networking framework
  • cryptography and pyOpenSSL, to deal with various network-level security needs

看著依賴包比較多巍佑,其實安裝起來并不復雜,以管理員的身份運行Windows命令提示符寄悯,在以安裝Python的前提下萤衰,運行:

pip install scrapy

pip會自動下載相關依賴包,如果順利的話猜旬,會直接安裝完成脆栋。

要注意的是,確認一下python的版本洒擦,pip會根據(jù)系統(tǒng)自動安裝相關包椿争,即如果系統(tǒng)是64位的,pip就會安裝64位的包熟嫩,但是twisted的版本一定要和python的一樣秦踪,如果操作系統(tǒng)是64位的,python是32位的邦危,pip直接安裝的twisted安裝就會出錯。

如果pip安裝twisted時出錯舍扰,在命令行輸入python倦蚪,查看本地python版本,然后到這里下載和python版本相同的whl文件边苹,使用pip install xxx.whl安裝陵且,完成后再執(zhí)行一遍pip install scrapy即可。

在命令行輸入scrapy, 若不報錯个束,則安裝完成慕购。

(二) 第一個Scrapy項目

照例,先上官方文檔 1.3,找了一下網(wǎng)上翻譯的文檔都是0.24或者0.24版茬底,所以建議大家還是看官方最新的英文版比較好沪悲。

打開命令提示符,進入想要創(chuàng)建項目的目錄阱表,運行

scrapy startproject scrapyTest

Paste_Image.png

項目創(chuàng)建完成殿如,讓我們來看一下項目結構贡珊,執(zhí)行:

tree /f

Paste_Image.png
└─scrapyTest
    │  scrapy.cfg           # 配置文件(deploy configuration file)
    │
    └─scrapyTest
        │  items.py         # 項目中的item文件(project items definition file)
        │  middlewares.py   # 中間件
        │  pipelines.py     # 項目中的管道文件(project pipelines file)
        │  settings.py      # 項目中的設置文件(project settings file)
        │  __init__.py
        │
        ├─spiders           # 存放爬蟲的文件夾(a directory where you'll later put your spiders)
        │  │  __init__.py
        │  │
        │  └─__pycache__
        └─__pycache__

進入spiders目錄,新建test_spider.py如下:

# -*- coding:utf-8 -*-

import scrapy
from bs4 import BeautifulSoup


class tsSpride(scrapy.Spider):
    name = 'test' # 爬蟲的唯一名字涉馁,在項目中爬蟲名字一定不能重復

    # start_requests() 必須返回一個迭代的Request
    def start_requests(self):
        # 待爬取的URL列表
        urls = ['http://www.reibang.com/',]
        # 模擬瀏覽器
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
        for url in urls:
            yield scrapy.Request(url=url, headers=headers, callback=self.parse)

    # 處理每個請求的下載響應
    def parse(self, response):
        soup = BeautifulSoup(response.body, 'html.parser')
        titles = soup.find_all('a', 'title')
        for title in titles:
            print(title.string)
        

在命令行輸入

scrapy crawl test

結果如下:


Paste_Image.png

上述代碼Scrapy為start_requests 中的每個URL創(chuàng)建了scrapy.Request對象门岔,并將 parse() 方法作為回調(diào)函數(shù)(callback)賦值給了Request(Scray中parse()為默認回調(diào)方法)。

The parse()
method will be called to handle each of the requests for those URLs, even though we haven’t explicitly told Scrapy to do so. This happens because parse()
is Scrapy’s default callback method, which is called for requests without an explicitly assigned callback.

上面代碼中用了Beautiful Soup來處理爬下來的數(shù)據(jù)烤送,而Scrapy也有Selector來處理數(shù)據(jù)寒随,今天先到這里,下次再用一個具體的小項目來更詳細地介紹Scrapy帮坚。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妻往,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叶沛,更是在濱河造成了極大的恐慌蒲讯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灰署,死亡現(xiàn)場離奇詭異判帮,居然都是意外死亡,警方通過查閱死者的電腦和手機溉箕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門晦墙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肴茄,你說我怎么就攤上這事晌畅。” “怎么了寡痰?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵抗楔,是天一觀的道長。 經(jīng)常有香客問我拦坠,道長连躏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任贞滨,我火速辦了婚禮入热,結果婚禮上,老公的妹妹穿的比我還像新娘晓铆。我一直安慰自己勺良,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布骄噪。 她就那樣靜靜地躺著尚困,像睡著了一般。 火紅的嫁衣襯著肌膚如雪链蕊。 梳的紋絲不亂的頭發(fā)上尾组,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天忙芒,我揣著相機與錄音,去河邊找鬼讳侨。 笑死呵萨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的跨跨。 我是一名探鬼主播潮峦,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勇婴!你這毒婦竟也來了忱嘹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤耕渴,失蹤者是張志新(化名)和其女友劉穎拘悦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橱脸,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡础米,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了添诉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屁桑。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖栏赴,靈堂內(nèi)的尸體忽然破棺而出蘑斧,到底是詐尸還是另有隱情,我是刑警寧澤须眷,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布该互,位于F島的核電站嗽交,受9級特大地震影響糜工,放射性物質(zhì)發(fā)生泄漏西傀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一捎稚、第九天 我趴在偏房一處隱蔽的房頂上張望乐横。 院中可真熱鬧求橄,春花似錦今野、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涵亏,卻和暖如春宰睡,著一層夾襖步出監(jiān)牢的瞬間蒲凶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工拆内, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旋圆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓麸恍,卻偏偏與公主長得像灵巧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抹沪,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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