自动下载 PTT 正妹图片
这篇文章会使用 Python 的 Requests 和 Beautiful Soup 函数库,实作一个可以自动下载图片的网络爬虫,只要知道 PTT Beauty 板的网页网址,就能将网页内全部的正妹图片,自动下载到电脑的文件夹中。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
什么是 PTT Beauty 板
PTT Beauty 板是一个 BBS 分享帅哥美女图片的空间,除了正常使用 BBS 登录浏览,也可以透过浏览器,进行单纯的网页浏览,范例使用的网址为其中一篇分享艺人安心亚照片的网页。
- PTT Beauty 板网址:https://www.ptt.cc/bbs/Beauty/index.html
- 安心亚照片分享网址:https://www.ptt.cc/bbs/Beauty/M.1638380033.A.7C7.html
抓取每张图片的网址
使用 Requests 函数库的 get 的方法,抓取安心亚网页的内容 ( 注意需要加入 Cookies,避免出现“看板内容需满十八岁方可浏览”的页面 )。
import requests
from bs4 import BeautifulSoup
web = requests.get('https://www.ptt.cc/bbs/Beauty/M.1638380033.A.7C7.html', cookies={'over18':'1'}) # 傳送 Cookies 資訊後,抓取頁面內容
soup = BeautifulSoup(web.text, "html.parser") # 使用 BeautifulSoup 取得網頁結構
imgs = soup.find_all('img') # 取得所有 img tag 的內容
for i in imgs:
print(i['src']) # 印出 src 的屬性
读取并下载图片
读取图片的网址后,再次使用 requests 抓取图片信息编码,接着使用 open 设定以二进制格式写入图片文件,每次打开新文件时,透过变数 name 设定编号,就能让每张图片的档名都不同。
- 注意,写入时要注意“文件夹”必须存在,不然会发生错误。
- 参考:内建函数 ( 文件读写 open ) - 存取模式
import requests
from bs4 import BeautifulSoup
web = requests.get('https://www.ptt.cc/bbs/Beauty/M.1638380033.A.7C7.html', cookies={'over18':'1'})
soup = BeautifulSoup(web.text, "html.parser")
imgs = soup.find_all('img')
name = 0 # 設定圖片編號
for i in imgs:
print(i['src'])
jpg = requests.get(i['src']) # 使用 requests 讀取圖片網址,取得圖片編碼
f = open(f'/content/drive/MyDrive/Colab Notebooks/download/test_{name}.jpg', 'wb') # 使用 open 設定以二進位格式寫入圖片檔案
f.write(jpg.content) # 寫入圖片的 content
f.close() # 寫入完成後關閉圖片檔案
name = name + 1 # 編號增加 1
程序执行后,就会看见图片依序下载到电脑里。
如果使用 Colab 就会下载到云端硬盘指定的文件夹里。
小结
学会自动下载图片的方法后,就能够轻松爬取并下载各种“静态网页”的图片 ( 动态网页会在另外的篇幅介绍 ),过程中比较需要注意的是“图片网址”,如果网址有包含 http 或 https 表示是“绝对路径”,直接下载即可,但如果没有,表示该网址是“相对路径”,就必须要自行将路径换成真正的路径位置。
微信扫码关注
抖音扫码关注