iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 1
17

前言

我目前是逢甲大學黑客社的顧問,也是去年的副社長,想當初我們在詢問社員為何要加入社團,為了駭別人電腦、進入暗網、想當駭客、覺得很酷、學程式、因為讀資訊系等,其實這些都是為了想要滿足某些慾望,「科技始終來自人性」,其實我們常常反覆地做一件事情,那就會想阿,何不寫個程式,讓程式幫我們做就好啦!

何為爬蟲

簡單的來說,就是把網站上面的資料複製下來,一筆資料很容易複製,那一千筆呢?更不要說是圖片,所以這就需要網路爬蟲來幫我們完成,這隻程式可以幫我們把網站資料爬(下載)下來,不管是圖片還是文字資料,這就是爬蟲,而我們這邊選擇以Python來撰寫,因為Python具有幾個特色:可讀性與簡潔性,如果是有寫過其他程式語言的就知道,這兩點在語言中很重要,對於一個工程師撰寫一個可讀性的程式碼超級難,我有一堆同學還在寫髒code呢,而且用Python來實作爬蟲程式碼其實沒幾行很簡潔,非常適合初學者學習。

環境

  1. Python 3.6.6
  2. pip 10.0.0
    • 為Python內建的套件管理
  3. jupyter notebook 4.4.0
    • 是一個介於IDE(Pycharm, Spider)以及Editor(text,VScode, 記事本)之間的一個讓你可以寫code的工具
    pip install jupyter notebook
    
  4. Python Requests套件
    • 對網路發動請求的套件,可實作對網頁做get、post等HTTP協定的行為,以後會有詳細的介紹。
    pip install requests
    
  5. Python Beautifulsoup4套件
    • 借助網頁的結構特性來解析網頁的工具,只需要簡單的幾條指令就可以提取HTML標籤裡的元素。
    pip install beautifulsoup4
    

Jupyter notebook

  1. 當環境都下載好後,先運行Jupyter notebook
    • 於CMD中輸入
    jupyter notebook
    
  2. 可於瀏覽器中自動開啟Jupyter notebook的頁面
    • 點選右上角的python3新建檔案
  3. 到這裡就是正式的進入到可撰寫Python code(Ctrl + Enter編譯)
  4. 學習程式語言的第一步 Hello world!

小實作

  1. 先將剛剛下載的Python套件import進來
    import requests
    from bs4 import BeautifulSoup 
    
  2. 將網頁Get下來
    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.ptt.cc/bbs/MobileComm/index.html") #將此頁面的HTML GET下來
    print(r.text) #印出HTML
    
  3. 將抓下來的資料用Beautifulsoup4轉為HTML的parser
    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.ptt.cc/bbs/MobileComm/index.html") #將網頁資料GET下來
    soup = BeautifulSoup(r.text,"html.parser") #將網頁資料以html.parser
    sel = soup.select("div.title a") #取HTML標中的 <div class="title"></div> 中的<a>標籤存入sel
    
  4. 因為我想選取的是網頁裡的文章標題,所以soup.select中放的才是div.title a
    <div class="title">	
        <a href="/bbs/MobileComm/M.1539248247.A.3CF.html">[問題]Pixel3 / XR / XZ3 選擇?</a>		
    </div>
    
  5. 最後寫一個迴圈將爬下來的文章標題印出來
    for s in sel:
        print(s["href"], s.text) 
    
  6. 完整的code與展示
    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.ptt.cc/bbs/MobileComm/index.html") #將網頁資料GET下來
    soup = BeautifulSoup(r.text,"html.parser") #將網頁資料以html.parser
    sel = soup.select("div.title a") #取HTML標中的 <div class="title"></div> 中的<a>標籤存入sel
    for s in sel:
        print(s["href"], s.text) 
    

下篇預告

  • 接下來會教大家實做更複雜的爬蟲,如遇到詢問框時,該如何自動點選在爬資料?
  • 有機會也會教大家實作Dcard圖文爬蟲
    (此文章為教育使用,個人實作皆屬個人行為,本作者不負任何法律責任)

下一篇
Day-2 Python爬蟲小人生(2)
系列文
在資訊宅中打滾的通訊系生30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
qanlka
iT邦見習生 ‧ 2019-03-11 15:45:04

你好:
我在cmd輸入jupyter notebook後
瀏覽器啟動了,並重新導向至jupyter notebook後
瀏覽器頁面會完全空白
請問該如何處理呢?

1
arguskao
iT邦新手 3 級 ‧ 2022-02-16 08:50:55

請問小實作第二個步驟

print(r.text) #印出HTML

為何不是print(r)
r.text還有其他的用法嗎?
謝謝!

bebeisdog iT邦新手 5 級 ‧ 2022-03-19 16:00:13 檢舉

你可以 print(r) 出來看看
主要在這邊他用 r.text 是 BeautifulSoup 套件包給的應用
如果想知道有什麼其他的用法(ex: r.content ...等),可以去查查 BeautifulSoup 的官方 Document,應該會有幫助。

0
cell_ET_master
iT邦新手 5 級 ‧ 2022-11-19 08:01:19

請問一定要在jupyter notebook 上面做嗎?可以用 Studio Code 或 Anaconda 嗎?

我要留言

立即登入留言