使用Scrapy抓取新聞網站資料

可以經由撰寫幾行程式,透過Scrapy模組登入帳號與抓取資料,當然要事先了解Scrapy的運作流程。經由本程式以抓取UDN聯合新聞網網站首頁(https://udn.com/news/breaknews/1/)的新聞標題與網址。

以下為操作步驟的影片。

(一)安裝Scrapy與建立專案

Step1)安裝Scrapy

執行「pip install scrapy」,因為使用Anaconda3,本身已經內建scrapy,所以就沒有安裝scrapy。

Step2)建立專案

在命令提示字元下,執行指令「scrapy startproject udncom」,建立專案udncom。

Step3)建立spider

在命令提示字元下,執行指令「cd udncom」切換到udncom資料夾下,執行指令「scrapy genspider udn udn.com」,建立名稱udn的spider,指定擷取網站 udn.com。一個專案可以有許多spider,每個spider使用「scrapy crawl 指定的spider」,就可以使用指定的spider抓取資料。

此時在Windows命令提示字元下,使用指令「tree /F」可以列出目前資料夾下與檔案的狀態,除了udncom\spider\udn.py為指令「scrapy genspider udn udn.com」所建立,其餘都是指令「scrapy startproject udncom」所建立,以下說明各個檔案的用途。

D:\jupyter\udncom> tree /F

列出磁碟區 Data 的資料夾 PATH

磁碟區序號為 8E74-5782

D:.

│ scrapy.cfg

└─udncom

│ items.py ===========>儲存資料的結構

│ middlewares.py ======>分成spider middleware與downloader middleware

│ pipelines.py =========>用於整理、過濾與刪除資料item,並將資料插入資料庫

│ settings.py ==========>設定檔案

│ __init__.py

└─spiders ===========>所有spider放在此資料夾

udn.py =============>剛剛使用指令「scrapy genspider udn udn.com」建立的spider

__init__.py

(二)建立抓取資料的spider程式碼

Step4)編輯udncom/spiders/udn.py,製作擷取網頁的程式

scrapy預設抓取start_urls所指定的網址,抓取後自動呼叫函式parse(第8到18行)進行資料處理,開啟檔案index.txt用於儲存新聞的標題與網址。

使用瀏覽器瀏覽https://udn.com/news/index,發現UDN聯合新聞網中新聞標題HTML語法如下。

所以使用「response.xpath('//div[@class="story-list__text"]/h3/a/text()').extract()」抓取UDN首頁的所有新聞標題儲存到title,使用「response.xpath('////div[@class="story-list__text"]/h3/a/@href').extract()」抓取UDN首頁的所有新聞網址儲存到url,使用zip配對title與url,最後將title與url寫入檔案index.txt。

Step5)執行scrapy專案,在第一層的udncom資料夾下,該udncom資料夾內有檔案「scrapy.cfg」,在命令提示字元下執行指令「scrapy crawl udn 」,在第一層的udncom資料夾下,產生檔案index.txt,該檔案內儲存新聞的標題與網址。