fbpx

任務:爬取INSIDE硬塞網路趨勢觀察網站的文章標題和發布日期

第一步驟:安裝3個套件

  1. request:發送請求到伺服端
  2. beautifulsoup:解析伺服端回傳的網頁內容,也就是網頁原始碼。裡面內建的html解析套件,所分析出來的網頁原始碼有時候沒那麼準確,所以建議大家用lsml套件
  3. lxml:解析xml、html原始碼的強大套件,解析出來的內容相對準確

第二步驟:網頁內容html原始碼的分析

  1. 在要爬取的地方按下滑鼠右鍵>檢查,chrome瀏覽器就會開啟開發人員工具,當你滑鼠停在哪邊它就會變色,這就是你在網頁上的位置
    1. 要爬取「INSIDE硬塞網路趨勢觀察網站」文章標題:它的網頁原始碼是h3,它的class是post_title,那等下要爬取時就是用h3這個html的標籤,而且它的class是post_title,這樣就可以定位到這個網頁的所有文章標題
    2. 要爬取「INSIDE硬塞網路趨勢觀察網站」發布日期:它的位置是hli的標籤,它的class是post_date的標籤,所以等下定位的時候,就是利用這個方式進行定位

第三步驟:以visual studio code為例開發網頁爬蟲

  1. 建立demo的資料夾
  2. 在資料夾底下建立scraper.py的檔案(python的檔案)
    1. 引入所需要的套件:
      1. beautifulsoup
      2. request:發送請求到網頁伺服端
      3. get:去查詢網址的網頁內容,括號內寫入要傳的網頁網址,發送請求給伺服端後,它就會把這個網址的網頁內容回傳給我們,所以回傳給我們就要利用一個變數把它接起來(response)
      4. 用print的方式來看一下這個網頁的內容➡️回傳html原始碼,上面都帶有資料

第四步驟:把資料丟到beautifulsoup裡面請它幫我們解析

建立一個beautifulsoup套件,把剛剛所得到的網頁原始碼,丟給它來建立一個soup物件,有這個soup物件我們就能利用它來進行元素的定位。beautifulsoup要指定一個解析器來幫助它解析html原始碼,所以後面要加lxml

【爬取文章標題】

  1. 首先要取到一整頁文章的標題,所以就可以用find取得文章的標題,丟給它建立一個soup套件。在第二步驟有看到這個網頁上的標題標籤是h3,class是post_title的類別,同樣用個變數接起來(title)。➡️取得一個文章標題。(若不想要這些html的標籤,就可以用beautifulsoup的getText的方法把html的標籤給去掉)
  2. 如果想要抓到多篇文章,就要寫find_all,找到所有只要標籤是h3、類別是post_title的標題,這時候print出來的東西➡️是一個串列包含多個文章,所以要用for迴圈的方式來讀取每一個標題的元素,再一一利用getText的方法把html的標籤給去掉(不喜歡空白可以用strip把空白清掉)➡️爬取所有文章標題

【爬取發布日期】

  1. 建立第二個scraper2.py的檔案,如第四步驟一樣發送請求給網站、取得伺服端回應原始碼、用beautifulsoup進行解析
  2. 抓到每個文章的區塊,一樣用beautifulsoup套件去找網頁裡面所有div標籤的class是post_list_item,一樣要用一個變數把它接起來(cards)➡️會取到這頁的很多塊文章的區塊。所以這時候用for迴圈去跑,去讀取每一個文章的區塊。因為要往下讀取每一個文章標題跟發布日期,所以這邊要去抓取區塊裡面的標籤是h3(文章標題),class是post_title,一樣把它存在變數裡面(title)。然後發布日期(published)找到這個區塊裡面發布日期標籤是li,class是post_date
  3. 用Formatted String Literal將字串格式化,把標題和日期印出來,一樣用getText把html標籤去掉,strip把空白清空➡️取到html原始碼,所爬到的資料會是乾淨、整齊沒有空白的

以下是講師Mike提供的相關學習資源:

 

amyamy

amyamy

知識不分貴賤,我分享的知識也會找到需要的人,讓我的文字能帶給你的生活一點改變。 如對內容有疑惑或興趣,想與作者直接討論,請聯繫email:[email protected]

Leave a Reply