iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
3

前言

繼上次教了大家遇到想爬下一頁跟遇到前置按鈕(ex:是否已滿18)的情況處理後,今天會進階到教大家如果遇到圖片想要爬下來該如何處理,並且以目前大學生比較常使用的聊天論壇-Dcard來為實作案例。

爬圖片

  1. 爬圖片也是利用Python套件requests實作,所以先import進來
    import requests
    
  2. 其實爬圖片也是將圖片頁面GET下來做處理
    pic = requests.get('https://imgur.dcard.tw/N2k5kV2m.jpg') #變數名稱為pic
    
  3. 將圖片頁面GET下來後,將其轉為二進制方式,因為接下來要將圖片的二進制存到本地端檔案中(此動作就是下載)
    img2 = pic.content #變數名稱命名為img2
    
  4. 接下來,在本地端開啟一個檔案(權限為可寫,二進制),將圖片二進位寫進去,並記得關閉檔案!!
    pic_out = open('img1.png','wb') #img1.png為預存檔的圖片名稱
    pic_out.write(img2) #將get圖片存入img1.png
    pic_out.close() #關閉檔案(很重要)
    
  5. 即可完成圖片爬蟲(完整版程式碼),打開本地資料夾就可以看到圖片(img1.png)
    import requests
    pic=requests.get('https://imgur.dcard.tw/N2k5kV2m.jpg') #圖片網址
    img2 = pic.content #圖片裡的內容
    pic_out = open('img1.png','wb') #img1.png為預存檔的圖片名稱
    pic_out.write(img2) #將get圖片存入img1.png
    pic_out.close() #關閉檔案(很重要)
    

開關檔

  • 小編突然忘記,好像沒有教到開關檔,所以借用一下 Day-1 Python爬蟲小人生(1) 爬標題的程式碼
  • Day-1 Python爬蟲小人生(1)
    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) 
    
  1. 如果想把這些標題存在本地端的記事本,就需要用到開檔寫入再關檔
  2. 先學在本地端開檔
    • FLAG有分成幾種(本處只介紹小編常用): r:讀取 w:寫入 b:二進制開檔 a:追加內容
    變數名稱 = open("檔案名稱",FLAG) 
    
  3. 開檔之後通常會對其檔案作寫入/讀取
    開檔變數名稱.read() #讀取
    開檔變數名稱.write("寫入內容") #寫入
    
  4. 開完檔案最後一定要關閉檔案(非常重要!!!!)
    開檔變數名稱.close()
    
  5. 整理上述的程式碼(開檔/寫檔/關檔)
    f = open('file.txt', 'w')
    f.write(str(s["href"]) + s.text+"\n")
    f.close()
    
  6. 如果將一次的爬蟲加上開檔/寫檔/關檔
    import requests
    from bs4 import BeautifulSoup
    f = open('file.txt', 'w')
    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)
        f.write(str(s["href"]) + s.text+"\n")
    f.close()
    
  7. 此時本地端應該會有一個檔案叫做file.txt,但是也可以活用一下讀取來查看檔案內容
    f = open('file.txt', 'r')
    r = f.read()
    print(r)
    f.close()
    

下篇預告

  • QQ這次小編累了,下一次再教大家可以自動下載Dcard喜歡的圖片與文章。
  • 祝大家今天有個好夢
    (此文章為教育使用,個人實作皆屬個人行為,本作者不負任何法律責任)

上一篇
Day-2 Python爬蟲小人生(2)
下一篇
Day-4 Python爬蟲實作篇(Dcard)-圖片!!!
系列文
在資訊宅中打滾的通訊系生30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言