博客
关于我
Python爬虫演绎正则提取数据
阅读量:806 次
发布时间:2019-03-25

本文共 1644 字,大约阅读时间需要 5 分钟。

Python爬虫演示:使用正则表达式提取数据

1. 什么是正则表达式

正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配工具,通过定义特定的模式可以快速提取或过滤网页中的结构化数据。它包含普通字符(如字母、数字)和特殊元字符(如 . * ?),能够描述复杂的字符匹配规则。

2. 爬取《男人装》网页内容

说明步骤

  • 访问目标网页

    使用 urllib.request 库发送 GET 请求,获取目标网页的 HTML 数据。

    from urllib import requestimport reimport os# 目标网页地址url = 'http://enrz.com/fhm/2016/12/17/74914.html'req = request.Request(url)html = request.urlopen(req)content = html.read().decode('utf-8')
  • 提取网页标题

    制定正则表达式匹配 <h2> 标签内的内容。

    # 过滤标题的正则表达式title_pattern = r'

    (.*?)

    '# 搜索并提取标题title_match = re.search(title_pattern, content)if title_match: print(f"网页标题:{title_match.group(1)}")
  • 提取图片路径

    设计正则表达式获取图片的 src 属性。

    # 过滤图片路径的正则表达式pic_src_pattern = r'
    '# 搜索并提取图片路径pic_src_match = re.search(pic_src_pattern, content)if pic_src_match: print(f"图片路径:{pic_src_match.group(1)}")
  • 创建存储路径

    根据标题自动创建文件夹。

    # 获取标题作为文件夹名称dir_name = title_match.group(1)# 创建文件夹dir_path = os.path.join(os.getcwd(), dir_name)if not os.path.exists(dir_path):    os.makedirs(dir_path)
  • 下载并保存图片

    使用循环处理每张图片,并将其保存到相应文件夹。

    while True:    # 搜索所有图片路径    pics = re.findall(pic_src_pattern, content)    for pic in pics:        if not os.path.exists(pic):            # 防止断线重试,直接跳转获取图片            req_pic = request.Request(pic)            try:                html_pic = request.urlopen(req_pic)                image_data = html_pic.read()                # 保存图片                pic_path = os.path.join(dir_path, pic.split('/')[-1])                with open(pic_path, 'wb') as f:                    f.write(image_data)            except:                pass    break
  • 完成任务!

    所需文件已成功创建并存入 dir_name 文件夹中,包含:

    • 每张图片:

      • 图片文件名(自动提取)
      • 图片完整路径(保存位置:dir_name/图片文件名
    • 详细的提取日志文件(可选扩展功能)

  • 转载地址:http://szdyk.baihongyu.com/

    你可能感兴趣的文章
    #C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
    查看>>
    #C8# UVM中的factory机制 #S8.4.1# factory机制的实现
    查看>>
    #C8# UVM中的factory机制 #S8.4.3# factory机制创建实例接口
    查看>>
    #C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考
    查看>>
    #Day Day Plan# 《NCB_PCI_Express_Base 5.0.1.0》pdf 译文笔记 模版
    查看>>
    #Linux# Linux系统下如何查看磁盘空间占据情况
    查看>>
    #Linux杂记# grep 查找命令常用选项大全(一)
    查看>>
    #Linux杂记# grep 查找命令常用选项大全(二)
    查看>>
    .exe已停止工作_windows资源管理器已停止工作怎么解决
    查看>>
    7 自动开启网卡_软件测试学习教程——CentOS 7 修改网卡设置
    查看>>
    8位二进制转bcd算法 c语言,二进制转BCD码快速算法 bin to bcd fast code.
    查看>>
    900行c语言贪吃蛇,原生js实现的贪吃蛇网页版游戏完整实例
    查看>>
    ado filter 多条记录_Excel 有了Filter函数VLOOKUP函数要靠边站了
    查看>>
    ado读取多条oracle数据,Oracle ADO数据存取
    查看>>
    anaconda新建python2环境安装不了jupyterlab_anaconda3安装及jupyter环境配置教程(全)...
    查看>>
    android asynctask handler 区别,AsyncTask与Thread+Handler简要分析
    查看>>
    android fastjson漏洞_初识Fastjson漏洞(环境搭建及漏洞复现)
    查看>>
    android pod 组件化_CocoaPods 组件化实践 - 私有Pod
    查看>>
    $CH0201$ 费解的开关
    查看>>
    android进程管理策略,Android进程保活
    查看>>