欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 如何运用python爬虫爬取百度贴吧动态加载的图片?

如何运用python爬虫爬取百度贴吧动态加载的图片?

2026/5/12 4:34:47 来源:https://blog.csdn.net/li901101123/article/details/145379003  浏览:    关键词:如何运用python爬虫爬取百度贴吧动态加载的图片?

动态加载的图片通常是在页面加载后通过JavaScript异步请求获取的,而requestsBeautifulSoup只能获取页面的初始HTML内容,无法执行JavaScript代码。

要处理动态加载的图片,可以使用以下方法:

1. 使用Selenium

Selenium是一个用于自动化Web浏览器的工具,可以模拟用户浏览网页的行为,包括点击、滚动等操作,从而获取动态加载的内容。

安装依赖

bash复制

pip install selenium
示例代码

Python复制

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import os
import requests# 初始化WebDriver
driver = webdriver.Chrome()# 打开目标网页
url = 'https://tieba.baidu.com/p/1234567890'  # 替换为目标帖子的URL
driver.get(url)# 等待页面加载
time.sleep(3)# 滚动页面以加载更多图片
for _ in range(5):driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)# 获取页面源码
html_content = driver.page_source# 关闭浏览器
driver.quit()# 解析HTML内容,提取图片URL
def extract_image_urls(html_content):from bs4 import BeautifulSoupsoup = BeautifulSoup(html_content, 'html.parser')images = soup.find_all('img')  # 查找所有图片标签image_urls = []for img in images:img_url = img.get('src')  # 获取图片的src属性if img_url and img_url.startswith('http'):  # 确保是完整的URLimage_urls.append(img_url)return image_urls# 下载并保存图片
def download_images(image_urls, save_dir='images'):if not os.path.exists(save_dir):os.makedirs(save_dir)  # 创建保存图片的文件夹for i, img_url in enumerate(image_urls):img_name = os.path.basename(img_url)  # 从URL中提取文件名save_path = os.path.join(save_dir, img_name)if os.path.exists(save_path):print(f"{img_name} already exists. Skipping...")continuetry:response = requests.get(img_url, timeout=10)response.raise_for_status()  # 确保请求成功with open(save_path, 'wb') as img_file:img_file.write(response.content)  # 保存图片print(f"Downloaded {img_name}")except requests.RequestException as e:print(f"Failed to download {img_url}. Error: {e}")time.sleep(1)  # 随机延时,避免被封禁# 主函数
def main():image_urls = extract_image_urls(html_content)download_images(image_urls)if __name__ == "__main__":main()

2. 使用Playwright

Playwright是一个用于自动化Web浏览器的工具,支持多种浏览器(如Chrome、Firefox、Safari等),可以模拟用户浏览网页的行为,从而获取动态加载的内容。

安装依赖

bash复制

pip install playwright
playwright install
示例代码

Python复制

from playwright.sync_api import sync_playwright
import os
import requests# 使用Playwright获取动态加载的图片
def get_dynamic_images(url, save_dir='images'):if not os.path.exists(save_dir):os.makedirs(save_dir)  # 创建保存图片的文件夹with sync_playwright() as p:browser = p.chromium.launch(headless=False)  # 启动浏览器page = browser.new_page()  # 打开新页面page.goto(url)  # 打开目标网页# 等待页面加载page.wait_for_load_state('networkidle')# 滚动页面以加载更多图片for _ in range(5):page.evaluate("window.scrollTo(0, document.body.scrollHeight);")page.wait_for_load_state('networkidle')# 获取所有图片images = page.query_selector_all('img')image_urls = [img.get_attribute('src') for img in images if img.get_attribute('src')]# 下载并保存图片for i, img_url in enumerate(image_urls):img_name = os.path.basename(img_url)  # 从URL中提取文件名save_path = os.path.join(save_dir, img_name)if os.path.exists(save_path):print(f"{img_name} already exists. Skipping...")continuetry:response = requests.get(img_url, timeout=10)response.raise_for_status()  # 确保请求成功with open(save_path, 'wb') as img_file:img_file.write(response.content)  # 保存图片print(f"Downloaded {img_name}")except requests.RequestException as e:print(f"Failed to download {img_url}. Error: {e}")time.sleep(1)  # 随机延时,避免被封禁browser.close()  # 关闭浏览器# 主函数
def main():url = 'https://tieba.baidu.com/p/1234567890'  # 替换为目标帖子的URLget_dynamic_images(url)if __name__ == "__main__":main()

注意事项

  1. 遵守法律法规:在爬取网站内容时,务必遵守相关法律法规和网站的使用条款。
  2. 合理设置爬取频率:过于频繁的爬取请求可能会对目标网站造成压力,甚至导致你的IP被封禁。请合理设置爬取频率。
  3. 处理反爬虫机制:如果遇到反爬虫机制(如验证码、IP封禁等),可以尝试设置请求头、使用代理IP等方法。

通过上述方法,你可以成功爬取百度贴吧的动态加载图片。希望这些内容对你有所帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词