简介:本篇文章将指导你如何使用Python爬虫从某度图片中批量下载图片。我们将使用requests和BeautifulSoup库,并通过分析网页结构来提取图片链接。最后,我们将使用os库将这些图片保存到本地。
在Python爬虫实战系列中,我们之前已经学习了如何爬取网页数据、解析JSON数据等。今天,我们将进一步学习如何从网页中批量下载图片。
首先,你需要安装requests和BeautifulSoup库。如果你还没有安装,可以使用以下命令进行安装:
pip install requests beautifulsoup4
接下来,我们将使用requests库来获取网页内容,并使用BeautifulSoup库来解析网页结构,提取图片链接。
import requestsfrom bs4 import BeautifulSoupimport os
然后,我们需要定义一个函数来下载图片。我们将使用os库来创建目录并将图片保存到本地。
def download_images(keyword, num_pages):base_url = 'https://www.baidu.com/s?wd=' + keyword + '&pn='for page in range(num_pages):url = base_url + str(page * 10)response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')img_tags = soup.find_all('img')for img in img_tags:img_url = img.get('src')if 'http' in img_url: # 如果图片链接是外部链接,直接下载response = requests.get(img_url)with open(os.path.join('images', img_url.split('/')[-2] + '.jpg'), 'wb') as f:f.write(response.content)elif 'file' in img_url: # 如果图片链接是内部链接,提取链接并下载img_url = img_url.replace('/n1/', '/n4/') # 百度调整了图片链接的目录结构,这里做一个简单的修复response = requests.get(img_url)with open(os.path.join('images', img_url.split('/')[-2] + '.jpg'), 'wb') as f:f.write(response.content)
在这个函数中,我们首先定义了一个基础的URL,然后通过循环请求不同的页码来获取网页内容。接下来,我们使用BeautifulSoup库来解析网页结构,提取出所有的图片标签。然后,我们遍历这些标签,提取出每个标签的src属性(即图片链接),并判断链接是否为外部链接或内部链接。如果是外部链接,我们直接下载图片;如果是内部链接,我们提取出链接并下载图片。最后,我们将图片保存到本地的images目录中。
现在,你可以调用这个函数来下载你想要的图片了。例如,如果你想要下载关于“猫”的图片,你可以这样做:
download_images('猫', 10) # 下载前10页的图片
注意:由于网络请求和文件操作都需要时间,这个函数可能需要一些时间才能运行完毕。另外,由于网络请求可能会失败或图片链接可能会失效,所以并不是所有的图片都能成功下载。在实际使用时,你可能需要根据实际情况进行一些调整和优化。