首页 > 编程知识 正文

如何批量下载某博主全部微博相册

时间:2023-11-19 06:59:07 阅读:290855 作者:FQRX

这篇文章将教大家如何通过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和相关库批量下载某博主全部微博相册。具体包括获取相册链接、登录并解析相册页面、批量下载照片等操作。希望读者可以通过本文学到有用的知识,并在工程实践中得到应用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。