贴吧:美图吧
帖子: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)
五、运行结果