iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

網路爬蟲系列 第 27

【Day27】網路爬蟲-建立Scrapy專案爬蟲程式

  • 分享至 

  • xImage
  •  

新增Scrapy專案
請執行『開始/Anaconda3(64-bits)/Anaconda Prompt』命令開啟Anaconda Prompt命令提示字元視窗後,輸入cd指令切換至欲新增專案的工作目錄,筆者是放在「\BigData\Cho8」資料夾,請依自己的狀況切換資料夾,若要切換到其他磁碟機,請在cd之後輸入Id,切換到工作目錄後,再輸入 scrapy startproject 指令新増 Scrapy 專案,在之後的参數是專案名稱Ch8_3,如下所示:

(base) C: \Users \JOE>cd \BigData\Ch08
(base) C: \BigData\Ch08>scrapy startprojectCh8_3

新增Python爬蟲程式
在成功新增 Ch8_3 專案後,我們需要在「spiders\」目錄新增Python爬蟲程式,請使用cd指令切換至專案目Ch8_3,然後輸入 scrapy genspider指令新増Python爬蟲程式,如下所示:

(base) C: \BigData\Ch08>cd Ch8_3 Enter
(base) C: \BigData\Ch08\Ch8_3>scrapy genspider pttnba ptt.cc Enter

上述指令的第1個參數 ptnba是爬蟲名稱,專案會在「spiders\」目錄新增同名 pttnba.py 程式檔案,最後是欲爬取的網域。
撰寫爬蟲程式擷取資料
在新增 pttnba,py爬蟲程式後,我們可以開始撰寫 parse()函數來取出每一篇發文的標題文字、推文數和作者。

mport scrapy
class PttnbaSpider (scrapy.Spider):
    name = 'pttnba'
    allowed_domains = ['ptt.cc']
    start_urls = ['https://www.ptt.cc/bbs/NBA/index.html']
    
    def parse (self, response):

上述 PttnbaSpider 類別的 name 屬性值是'pttnba',這是爬蟲程式名稱,之後需要使用此名稱來執行爬蟲程式,然後是allowed_domains屬性的允許網域清單,和 start_urls 屬性的開始爬蟲的網址,最後是 parse()函數:

def parse (self, response) :
    titles = response.css ("div.r-ent > div.title > a::text"). extract ()
    votes = response.xpath ("//div|@class='nrec']/span/text () "). extract ()
    authors = response. xpath ("//div[@class='meta']/div[1]/text () "). extract ()
    for item in zip(titles, votes, authors):
        scraped_info = {
                "title" : item[0],
                "vote"  : item[1],
                "author":item[2],
        }
        yield scraped_info

上述函數參數是回應的 response 物件,我們可以使用css()或 xpath()函數取出標題文字、推文數和作者,在for/in迴圈使用 zip()函數先將取回資料打包成元組後,再一一取出資料建立成 scraped_info字典,即從每一篇發文取出的資料,最後呼叫yield傳回scraped_info字典。

yield scraped_info

上述 yield 是 Python 關鍵字,類似函數的 return 關鍵字可以回傳資料,只是傳回的是產生器,如同 for/in迴圈的range()函數。


上一篇
【Day26】網路爬蟲-Scrapy爬蟲框架的基礎
下一篇
【Day28】網路爬蟲-輸出Scrapy爬取的資料
系列文
網路爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言