这篇文章将教大家如何通过Python代码批量下载某博主全部微博相册。
一、获取微博相册链接
首先,我们需要获取到某博主的所有微博相册链接。可以通过以下代码获取到某博主的首页链接:
import requests
from bs4 import BeautifulSoup
url = 'https://weibo.com/xxx'  # 博主首页链接
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
album_links = []
for link in soup.find_all('a'):
    href = link.get('href')
    if 'photo' in href:
        album_links.append(href)
print(album_links)  # 输出博主所有微博相册的链接上述代码中,我们使用requests库发起GET请求,获取到博主首页的HTML代码。然后使用BeautifulSoup库对HTML进行解析,通过查找所有a标签的href属性,筛选出包含“photo”的链接,即为博主的微博相册链接。
二、登录微博并解析相册页面
由于微博需要登录才能查看相册页面,所以我们需要使用Selenium库模拟登录,并使用BeautifulSoup库对相册页面进行解析。
首先,我们需要安装Selenium库:
pip install selenium接着,使用以下代码进行登录:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome()  # 需要先下载ChromeDriver并配置环境变量
driver.maximize_window()
driver.get('https://weibo.com/login.php')
# 手动输入账号密码或使用cookies登录
sleep(30)
# 登录成功后,进入相册页面
driver.get('https://photo.weibo.com/albums') 上述代码中,我们首先启动Chrome浏览器并最大化窗口。然后打开微博的登录页面,并手动输入账号密码或使用提前准备好的cookies登录。登录成功后,跳转到微博的相册页面。
接着,我们使用以下代码解析相册页面,获取相册的名称和照片链接:
soup = BeautifulSoup(driver.page_source, 'html.parser')
albums = soup.find_all('a', class_='album-cover')
album_dict = {}
# 获取相册名称和链接
for album in albums:
    album_name = album.get('title')
    album_link = album.get('href')
    album_dict[album_name] = album_link
# 获取相册中所有照片的链接
for album_name, album_link in album_dict.items():
    driver.get(album_link)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    photos = soup.find_all('img')
    photo_links = []
    for photo in photos:
        link = photo.get('src').replace('orj360', 'large')
        photo_links.append(link)
    album_dict[album_name] = photo_links
print(album_dict)  # 输出相册名称和照片链接上述代码中,我们使用BeautifulSoup库对相册页面进行解析,获取每个相册的名称和链接。然后使用WebDriver模拟访问每个相册链接,并解析页面获取照片链接。最终得到一个字典,包含每个相册的名称和所有照片的链接。
三、批量下载照片
最后,我们使用以下代码批量下载所有照片:
import os
import requests
DOWNLOAD_PATH = 'download'  # 下载路径
if not os.path.exists(DOWNLOAD_PATH):
    os.mkdir(DOWNLOAD_PATH)
for album_name, photo_links in album_dict.items():
    album_path = os.path.join(DOWNLOAD_PATH, album_name.replace('/', '-'))
    if not os.path.exists(album_path):
        os.mkdir(album_path)
    for link in photo_links:
        filename = link.split('/')[-1]
        filepath = os.path.join(album_path, filename)
        if os.path.exists(filepath):
            continue
        response = requests.get(link)
        with open(filepath, 'wb') as f:
            f.write(response.content)
print('下载完成!')上述代码中,我们首先定义了全局变量DOWNLOAD_PATH,用于指定下载路径。然后遍历每个相册,为每个相册创建一个对应的文件夹。接着遍历相册中所有照片的链接,为每张照片创建一个对应的文件并进行下载。最终,我们可以在DOWNLOAD_PATH路径下看到所有下载的照片。
四、总结
通过本文的介绍,我们学习了如何使用Python和相关库批量下载某博主全部微博相册。具体包括获取相册链接、登录并解析相册页面、批量下载照片等操作。希望读者可以通过本文学到有用的知识,并在工程实践中得到应用。
原创文章,作者:DKXHN,如若转载,请注明出处:https://www.506064.com/n/374071.html
 
 微信扫一扫
微信扫一扫  支付宝扫一扫
支付宝扫一扫 