当前位置: 首页 > article >正文

python爬虫初体验(四)—— 百度文库PPT的爬取

文章目录

      • 1. 安装包
      • 2. 相关代码
      • 3. 说明
      • 4. 注意事项
      • 5. 扩展功能
        • 5.1 多页面下载
        • 5.2 输入地址下载

在Python 2中编写一个爬虫来大量下载图片,可以使用requests库来发送HTTP请求,并使用BeautifulSoup来解析HTML页面。此外,可以使用urllib2库来下载图片。lxml 是一个 Python 库,用于处理 XML 和 HTML 文档。它提供了高效的 XML/HTML 解析和生成工具,是处理 Web 页面内容的常用工具之一。

1. 安装包

pip install requests
pip install beautifulsoup4
pip install lxml
pip install urllib2

2. 相关代码

下面是一个相关代码,演示如何从一个网页中下载图片:

# -*- 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放入一个列表中,并循环处理每个页面。

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_inputraw_input是一个内置函数,用于从标准输入(通常是键盘)读取一行文本,并返回一个字符串。这个函数不会执行任何类型的转换,返回的内容就是用户输入的原始字符串。

def main():
  url = raw_input('输入百度文库地址:')

  fetch_images_from_page(url)

if __name__ == '__main__':
  main()

http://www.kler.cn/a/321797.html

相关文章:

  • ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
  • VoIP是什么?
  • TVBox 网络接口
  • linux,一、部署LNMP环境二、配置动静分离三、地址重写四、编写systemd Unit文件
  • Spark RDD中常用聚合算子源码层面的对比分析
  • 基于STM32设计的矿山环境监测系统(NBIOT)_262
  • cpu路、核、线程、主频、缓存
  • 解决macOS MySQL安装后不能远程访问的问题
  • Vue3.3新特性defineModel
  • 2023_Spark_实验十一:RDD基础算子操作
  • 从零开始使用树莓派debian系统使用opencv4.10.0进行人脸识别(保姆级教程)
  • Linux(Ubuntu)源码安装postgresql16.3
  • mysql数据库的基本管理
  • 【后端】【nginx】nginx常用命令
  • 力扣224. 基本计算器
  • 22 vue3之全局函数和变量插件编写
  • Flask中创建多线程和多进程
  • 黑龙江等保托管:全面解析与实践指南
  • IOS-IPA签名工具 request_post 任意文件读取复现
  • Stable Diffusion 使用详解(13)--- 3D纹理增强
  • C#邮件发送:实现自动化邮件通知完整指南!
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL62
  • 软考高级:敏捷开发 SCRUM
  • 后端Java-SpringBoot整合MyBatisPlus步骤(超详细)
  • LabVIEW界面输入值设为默认值
  • 基于SSM+小程序的英语学习交流平台管理系统(学习3)(源码+sql脚本+视频导入教程+文档)