009:博客類爬蟲項目實戰

爬蟲項目開發的第一步,首先需要對我們想要實現的爬蟲項目的功能進行定位和分析,即進行需求分析工作。

項目分析:

在今天的項目中,我們建立的爬蟲需要實現的功能有:
1、爬取博客中任意一個用戶的所有博文信息。
2、將博文的文章名、文章URL、文章點擊數、文章評論數等信息提取出來。
3、將提取出來的數據寫入Mysql數據庫中。

可以發現,該爬蟲項目額主要目的是將博客中用戶所有博文的相關信息提取出來並儲存到數據庫中。

該項目的難點有:
1、如何提取文章點擊數,文章評論數等信息。
2、如何通過循環爬取某個用戶的所有博文信息。
3、pipelines.py 中對信息的進一步處理。
4、Xpath 表達式與正則表達式的配合使用。
5、在Scrapy中模擬瀏覽器進行爬取。

實現思路:

該項目中,主要的實現有:

  • 1、使用Urllib模塊手動編寫響應爬蟲實現。
  • 2、使用Scrapy框架編寫響應爬蟲項目實現。

但是考慮到Scrapy框架實現起來相對來說更方便,我們這裏是使用Scrapy方法來編寫。
使用框架的思路有兩種:

  • 1、使用基於basic爬蟲模板的爬蟲實現
  • 2、使用基於crawl爬蟲模板的自動爬蟲實現。

在本項目中,我們將使用基於basic爬蟲模板的爬蟲實現,如果大家想嘗試基於crawl爬蟲模板的自動爬蟲實現,可以關注專欄,後面的文章會寫到。

實戰編寫:

接下來爲大家逐步分析並實現本爬蟲項目的編寫。
首先,我們需要設計好本項目中需要用到的Mysql數據庫,用來儲存文章名,文章Url,文章點擊數評論數等信息。
本項目中的Mysql數據庫表結構如下圖所示,其中數據庫名字爲hexun。表名爲myhexum。

在這裏插入圖片描述
設計好數據庫後,我們可以通過SQL語句建立設計好的數據庫。
首先我們應該創建數據庫hexun,

create database hexun

創建數據庫之後,需要選擇該數據庫並在該數據庫下創建對應的表格,SQL語句如下所示:

use hexum

在這裏插入圖片描述

create table myhexun(id int(10) auto_increment primary key not null,name varchar(30), url varchar(100),hits int(15),comment int(15));

在這裏插入圖片描述

創建表格後,我們可以通過show tables 來查看我們剛剛創建的表格是否成功。
在這裏插入圖片描述
在這裏插入圖片描述
可以看到,此時數據庫hexun下的表已經有了他自己字段。
我們需要基於Scrapy框架編寫我們的爬蟲項目。
首先,可以在cmd命令行中創建對應的爬蟲項目hexunpjt。如下圖所示:

在這裏插入圖片描述
在這裏插入圖片描述
創建好爬蟲項目之後,我們可以通過編輯器先編寫爬蟲項目中的items.py文件。將文件修改爲如下所示:
在這裏插入圖片描述
編寫好items.py文件之後,還需要編寫pipelines.py 文件對爬取到的信息進一步處理,我們將pipelines.py文件修改爲如下所示,關鍵部分已註釋。
在這裏插入圖片描述
在這裏插入圖片描述
接下來我們還需要編寫settings.py文件進行響應的配置。
首先我們需要開啓ITEM_PIPELINES,將設置文件中的ITEM_PIPELINES修改爲如下:
在這裏插入圖片描述
開始了ITEM_PIPELINES之後,爲了避免爬蟲被對方服務器通過我們的Cookie信息識別從而將我們的爬蟲禁止,我們可以關閉使用Cookie,將設置文件中的COOKIES_ENABLED信息修改爲如下所示:
在這裏插入圖片描述
隨後,爲了避免對方服務器的robots.txt文件對我們的爬蟲進行限制,可以在文件中設置不遵循robots協議進行爬取。我們將設置文件中的ROBOTSTXT_OBEY部分設置爲如下所示:
在這裏插入圖片描述
設置好配置文件之後,我們可以在本項目中創建一個爬蟲。在cmd命令行中使用下面指令進行創建:(cd到項目中)
在這裏插入圖片描述
在此我們基於basic模板闖進一個名爲myhexunspd的爬蟲。接下來,我們需要編寫該爬蟲實現網頁的爬取:
首先我們分析一下如何編寫該爬蟲:
我們打開某博客中任意一個用戶的博文列表頁。比如我們打開網址是: http://fjrs168.blog.hexun.com/
打開後:
在這裏插入圖片描述
出現上圖界面。
我們需要對這個頁面中要提取的信息進行分析。
在這裏插入圖片描述
在這裏插入圖片描述
所以我們的Xpath表達式可以爲:

"//span[@class='ArticleTitleText']/a/text()"

文章URL的Xpath表達式爲:

"//span[@class='ArticleTitleText']/a/@href"

可以看到,源代碼中沒有包含文章的點擊數和閱讀數等信息。
因爲這些信息是通過javascrapt腳本動態獲取的。此時我們可以使用Fiddler工具進行分析。
在這裏插入圖片描述
通過分析我們會發現,所示click108659235對應的值就是我們所查看的博文列表當前閱讀數。click108641909對應的是第二篇。comment108641909對應的是評論數。
在這裏插入圖片描述
我們可以在該網頁中通過正則表達式將對應的博文閱讀數評論數提取出來。
閱讀數: "click\d*?’,’(\d*?)’ "
評論數: "comment\d*?’,’(\d*?)’ "

通過fiddler分析出來他對應的網址:
通過正則表達式將儲存評論數和閱讀數的網址信息提取出來:

'<script type="text/jacascript"  src="(http://click.tool.hexun.com/.*?)">'

接下來我們要:
1、獲取對應的點擊數和評論數的網址
2、通過urllib.request爬取對應儲存博文的點擊數和評論數的網址中的數據
3、使用正則表達式將博文的點擊數和評論數提取出來

我們先實現獲取任意一個用戶的所以博文:
將爬蟲文件myhexunspd.py修改爲如下所示:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
比如我們要修改其他用戶的信息,只需要更改爬蟲文件中的uid即可。
比如,我們首先找一個博客網址如下:
http://shihanbingblog.blog.hexun.com/

將uid = “19940007”
修改爲uid = “shihanbingblog”
即可以實現爬取另一個用戶的博文信息。

調試與運行:

編寫好對應的爬蟲項目之後,我們可以運行該爬蟲項目下的爬蟲文件myhexunspd.py。如下所示:

scrapy crawl myhexunspd --nolog

基本上完了。有點倉促。
過幾天再做修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章