Python爬虫实战(五):批量下载某度图片

作者:谁偷走了我的奶酪2024.02.19 01:17浏览量:3

简介:本篇文章将指导你如何使用Python爬虫从某度图片中批量下载图片。我们将使用requests和BeautifulSoup库,并通过分析网页结构来提取图片链接。最后,我们将使用os库将这些图片保存到本地。

在Python爬虫实战系列中,我们之前已经学习了如何爬取网页数据、解析JSON数据等。今天,我们将进一步学习如何从网页中批量下载图片。

首先,你需要安装requests和BeautifulSoup库。如果你还没有安装,可以使用以下命令进行安装:

  1. pip install requests beautifulsoup4

接下来,我们将使用requests库来获取网页内容,并使用BeautifulSoup库来解析网页结构,提取图片链接。

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import os

然后,我们需要定义一个函数来下载图片。我们将使用os库来创建目录并将图片保存到本地。

  1. def download_images(keyword, num_pages):
  2. base_url = 'https://www.baidu.com/s?wd=' + keyword + '&pn='
  3. for page in range(num_pages):
  4. url = base_url + str(page * 10)
  5. response = requests.get(url)
  6. soup = BeautifulSoup(response.text, 'html.parser')
  7. img_tags = soup.find_all('img')
  8. for img in img_tags:
  9. img_url = img.get('src')
  10. if 'http' in img_url: # 如果图片链接是外部链接,直接下载
  11. response = requests.get(img_url)
  12. with open(os.path.join('images', img_url.split('/')[-2] + '.jpg'), 'wb') as f:
  13. f.write(response.content)
  14. elif 'file' in img_url: # 如果图片链接是内部链接,提取链接并下载
  15. img_url = img_url.replace('/n1/', '/n4/') # 百度调整了图片链接的目录结构,这里做一个简单的修复
  16. response = requests.get(img_url)
  17. with open(os.path.join('images', img_url.split('/')[-2] + '.jpg'), 'wb') as f:
  18. f.write(response.content)

在这个函数中,我们首先定义了一个基础的URL,然后通过循环请求不同的页码来获取网页内容。接下来,我们使用BeautifulSoup库来解析网页结构,提取出所有的图片标签。然后,我们遍历这些标签,提取出每个标签的src属性(即图片链接),并判断链接是否为外部链接或内部链接。如果是外部链接,我们直接下载图片;如果是内部链接,我们提取出链接并下载图片。最后,我们将图片保存到本地的images目录中。

现在,你可以调用这个函数来下载你想要的图片了。例如,如果你想要下载关于“猫”的图片,你可以这样做:

  1. download_images('猫', 10) # 下载前10页的图片

注意:由于网络请求和文件操作都需要时间,这个函数可能需要一些时间才能运行完毕。另外,由于网络请求可能会失败或图片链接可能会失效,所以并不是所有的图片都能成功下载。在实际使用时,你可能需要根据实际情况进行一些调整和优化。