開頭
這兩天后臺收到了很多讀者發(fā)消息說:“看了之前寫的關(guān)于爬蟲的文章之后,自己也想寫一個爬蟲但不知從何下手”。那么我今天就分享一個簡單的案例,和大家一起從零寫一個簡單的爬蟲。
在開始分享之前,我想提一件事情。
我知道,爬蟲其實(shí)在部分外行人心目中一直是一個低劣或者低俗的人才做的事。那么,不管你是不是這么想,我只能說一句:要是沒有爬蟲我相信很多公司根本就沒法起來。
那么,今天我主要通過一個爬蟲框架 Scrapy 來一步步實(shí)現(xiàn)爬取 V2EX 首頁所有的熱門文章,旨在讓你掌握這個框架來爬取對自己有用的數(shù)據(jù)。
正文
** 一、Scrapy 是什么?**
官網(wǎng):
http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html
Scrapy是一個為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架??梢詰?yīng)用到數(shù)據(jù)挖掘,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。
其最初是為了頁面爬?。ǜ_切的來說,網(wǎng)絡(luò)爬?。┧O(shè)計的,也可以應(yīng)用在獲取API所返回的數(shù)據(jù)或者通用的網(wǎng)絡(luò)爬蟲。
Scrapy是一個非常強(qiáng)大且好用的爬蟲框架,它不僅提供了一些開箱即用的基礎(chǔ)組件,還提供了強(qiáng)大的自定義功能。
框架的學(xué)習(xí)就是修改配置文件,填充代碼就可以了。
二、安裝 Scrapy?
由于我是用 Mac 來開發(fā)的,所以安裝命令也是 Mac 下的,至于 Window 和 Linux 可以參考安裝。
pip install scrapy
當(dāng)然,一開始你得有 Python 的開發(fā)環(huán)境,這里就不安利 Python 的安裝方法了。直接百度即可。
三、用 Scrapy 創(chuàng)建一個項目
Scrapy 中提供了 startproject 命令來創(chuàng)建爬蟲項目。命令如下:
scrapy startproject V2EX
我們創(chuàng)建一個項目 V2EX 用來爬取 V2 首頁文章的所有信息。
其中:
spiders 文件夾下就是你要實(shí)現(xiàn)爬蟲功能的核心代碼。在 spiders 文件夾下創(chuàng)建一個 spider ,用來爬取 V2 首頁文章。
scrapy.cfg 是項目的配置文件。
settings.py用于設(shè)置請求的參數(shù),使用代理,爬蟲數(shù)據(jù)后文件保存等等的。
四、Scrapy 爬取 V2 首頁文章
1、新建 v2exSpider
在 spiders 文件夾下新建一個文件, v2exSpider.py
如上圖,start_urls 中添加 v2ex 的首頁地址,同時重寫 parse 方法。這樣 Spider 將基于 start_urls 中的地址進(jìn)行訪問,并將數(shù)據(jù)回調(diào)給 parse 方法。
其中,response 就是返回的網(wǎng)頁數(shù)據(jù)。
處理好的數(shù)據(jù)放在 items 中,在 items.py 設(shè)置好要處理哪些數(shù)據(jù)字段。這里我們來抓取 V2 首頁的:作者地址、作者頭像、文章地址、所屬節(jié)點(diǎn)、作者昵稱、最后一次回復(fù)者昵稱、最后一次回復(fù)者地址、最后一次回復(fù)時間。
那么,要解析處理哪些數(shù)據(jù)在 items.py 中定義好,也就相當(dāng)于 java 中的實(shí)體類:
2、 分析 V2EX 首頁各元素的 xpath
xpath 的概念可以在 60行代碼拿到10G國外xx視頻... 中了解,當(dāng)然你可以直接看這個教程:
http://www.w3school.com.cn/xpath/index.asp
通過 Chrome 打開 v2ex.com ,同時在當(dāng)前頁面空白處點(diǎn)擊右鍵,選中 inspect ,這樣就可以看到當(dāng)前頁面的 Elements 。
(圖片略大,耐心訪問)
在這里我們可以分析出來每一篇文章的標(biāo)題、地址等等的 xpath 路徑。
同時,發(fā)現(xiàn)首頁的50篇文章都是屬于 div[@class='cell item'] 的數(shù)據(jù),因此我們可以通過
selector.xpath('//div[@class="cell item"]')
拿到所有文章的數(shù)據(jù),然后再分析出具體數(shù)據(jù)的 xpath ,從而拿到了所有需要的數(shù)據(jù)。
解析的數(shù)據(jù)保存:
這時數(shù)據(jù)分析處理好了,還有最重要的一步,提交:
yield v2Item
OK! 萬事俱備,數(shù)據(jù)保存在哪里,什么格式?
在 settings.py 中加入兩行代碼:
如何運(yùn)行這個爬蟲?
scrapy crawl v2exSpider
這樣就可以把 V2EX 的首頁文章信息都爬取到了本地的 csv 文件中了。
最后,你會發(fā)現(xiàn)當(dāng)前代碼只能爬取 V2 中首頁的文章,這時候你就需要分析到 v2ex 中下一頁的 xpath ,然后拿到這個 url ,通過 yield Request(next_link,callback=self.parse),這樣就可以一直爬取到 v2 最后一頁的數(shù)據(jù)。
來看看數(shù)據(jù):
總結(jié)
爬蟲需謹(jǐn)慎,爬蟲需有度。
本篇文章中項目的源代碼托管在 Github,點(diǎn)擊 【閱讀原文】 。
....end...
行為藝術(shù)要持之以恒,iOS專用贊賞通道。
長摁‘識別二維碼’,一起進(jìn)步
生活不止眼前的茍且,還有手下的代碼、
和嘴上的扯淡
——
個人博客: http://xiyoumc.0x2048.com
Github:https://www.github.com/xiyouMc