貼吧:美圖吧
帖子:https://tieba.baidu.com/p/5838004691
一、目標
通過Python下載任意百度貼吧帖子的圖片並保存到本地。
二、分析網址
第一頁
第二頁
第三頁
我們可以發現:帖子的頁數會形成一個很有規律的網址:
https://tieba.baidu.com/p/5838004691?pn=1
最後的數字即頁數
三、分析網頁
我們點擊帖子的圖片之後會到達其資源網址:
可以在打開的資源網址或原帖子去保存圖片,但是這個不是我們的目標,我們要自動下載,而不是手動保存。
我們在帖子頁面點擊F12,Ctrl+F查找Image(圖片一般是Image),然後我們回車一個個的看,發現:
src中的網址右鍵Open in new tab,打開後是帖子中的圖片。
ok,目前爲止我們找到了帖子每一頁網址的內在規律;找到了帖子中圖片的src地址。
然後,我們需要編寫程序下載指定帖子的所有圖片並保存到本地了。
四、程序代碼
'''
@Author: ZoJet
@Date: 2019-06-19 19:00:47
@Version:
@Content:
'''
import re, os, requests
from bs4 import BeautifulSoup
# 數據包頭
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Connection':'keep-alive',
}
s = requests.session()
# 得到圖片資源網址
def get_url(text):
soup = BeautifulSoup(text, 'lxml')
urls = soup.find_all('img', {'class':'BDE_Image'})
url = [i.get('src') for i in urls]
return url
# 保存圖片到指定文件夾
def save_img(url):
img_name = url.strip().split('/')[-1]
url_re = s.get(url.strip(), headers=headers)
if url_re.status_code == 200:
if not os.path.exists('download/tieba_img'):
os.mkdir('download/tieba_img')
open('download/tieba_img/' + img_name, 'wb').write(url_re.content)
# 指定帖子網址和下載頁數後開始下載
if __name__ == '__main__':
# https://tieba.baidu.com/p/5838004691?pn=
tiezi_web = input("請輸入帖子第一頁的網址:")
# 38
page_count = int(input("請輸入下載帖子圖片的頁數:"))
pic_count = 0
for i in range(page_count):
url = tiezi_web + str(i + 1)
web_content = s.get(url).text
urls = get_url(web_content)
for url in urls:
pic_count += 1
save_img(url)
print("下載完畢,總共%d張圖" %pic_count)
五、運行結果