文章目录
-
-
- [1. 安装包](#1. 安装包)
- [2. 相关代码](#2. 相关代码)
- [3. 说明](#3. 说明)
- [4. 注意事项](#4. 注意事项)
- [5. 扩展功能](#5. 扩展功能)
-
- [5.1 多页面下载](#5.1 多页面下载)
- [5.2 输入地址下载](#5.2 输入地址下载)
-
在Python 2中编写一个爬虫来大量下载图片,可以使用requests库来发送HTTP请求,并使用BeautifulSoup来解析HTML页面。此外,可以使用urllib2库来下载图片。lxml 是一个 Python 库,用于处理 XML 和 HTML 文档。它提供了高效的 XML/HTML 解析和生成工具,是处理 Web 页面内容的常用工具之一。
1. 安装包
bash
pip install requests
pip install beautifulsoup4
pip install lxml
pip install urllib2
2. 相关代码
下面是一个相关代码,演示如何从一个网页中下载图片:
python
# -*- coding: utf-8 -*-
import requests
import os
import urllib2
from lxml import etree
# 创建目录函数
def create_file(file_path):
# 如果目录不存在,则创建目录
if not os.path.exists(file_path):
os.makedirs(file_path)
# 下载图片函数
def download_image(url, path):
try:
# 使用 urllib2 打开 URL 并获取响应
response = urllib2.urlopen(url)
# 以二进制写模式打开文件,并写入响应内容
with open(path, 'wb') as f:
f.write(response.read())
except Exception as e:
# 如果发生异常,打印错误信息
print("Failed to download image: {}".format(url))
print("Error: ", str(e))
# 从网页中抓取图片的函数
def fetch_images_from_page(url):
# 使用 requests 发送 GET 请求获取网页内容
resp = requests.get(url)
# 解析网页文本
text = resp.text
# 使用 lxml 解析 HTML 文档
html = etree.HTML(text)
# 通过 XPath 获取包含图片的元素列表
img_list = html.xpath('//div[@class="mod flow-ppt-mod"]/div/div/img')
# 初始化计数器
cnt = 1
# 目标文件路径
file_path = './ppt/'
# 创建目标文件夹
create_file(file_path)
# 遍历图片元素列表
for i in img_list:
try:
# 尝试获取图片的 src 属性
img_url = i.xpath('./@src')[0]
except IndexError:
# 如果 src 属性不存在,则尝试获取 data-src 属性
img_url = i.xpath('./@data-src')[0]
# 构建图片文件名
file_name = '%s/page_%d.jpg' % (file_path, cnt)
# 下载图片
download_image(img_url, file_name)
# 输出下载成功的提示信息
print("Downloaded: {}".format(file_name))
# 增加计数器
cnt += 1
# 主函数
def main():
# 目标网页 URL
url = 'https://wenku.baidu.com/view/c784625f1a2e453610661ed9ad51f01dc3815771.html'
# 调用抓取图片的函数
fetch_images_from_page(url)
# 如果当前模块是主程序,则执行 main 函数
if __name__ == '__main__':
main()
3. 说明
- 导入模块:导入必要的模块 requests、os、urllib2 和 lxml.etree。
- 创建目录函数:create_file 用于创建指定的目录。
- 下载图片函数:download_image 用于下载图片并保存到本地。
- 从网页中抓取图片的函数:fetch_images_from_page 用于从指定网页抓取图片并下载到本地。
- 主函数:main 用于定义入口 URL 并调用抓取图片的函数。
4. 注意事项
- 图片URL:确保图片的URL是绝对路径。如果是相对路径,需要拼接成绝对路径。
- 错误处理:添加了异常处理逻辑,以处理下载过程中可能出现的错误。
- 文件路径:确保保存图片的路径正确,并且有写入权限。
- XPath 表达式:使用 XPath 表达式从网页中提取图片元素。
5. 扩展功能
5.1 多页面下载
如果你需要从多个页面下载图片,可以将页面的URL放入一个列表中,并循环处理每个页面。
python
def main():
# 目标URL列表
urls = ['https://example.com/images1', 'https://example.com/images2']
# 抓取并下载图片
for url in urls:
fetch_images_from_page(url)
if __name__ == '__main__':
main()
5.2 输入地址下载
如果你需要输入想要的地址,然后下载相对应的图片,需要使用raw_input
,raw_input
是一个内置函数,用于从标准输入(通常是键盘)读取一行文本,并返回一个字符串。这个函数不会执行任何类型的转换,返回的内容就是用户输入的原始字符串。
python
def main():
url = raw_input('输入百度文库地址:')
fetch_images_from_page(url)
if __name__ == '__main__':
main()