【Delphi 爬虫库 6】使用正则表达式提取猫眼电影排行榜top100

正则表达式库的简单介绍

正则表达式易于使用,功能强大,可用于复杂的搜索和替换以及基于模板的文本检查。这对于输入形式的用户输入验证特别有用-验证电子邮件地址等。您还可以从网页或文档中提取电话号码,邮政编码等,在日志文件中搜索复杂的模式,然后您就可以想象得到。无需重新编译程序即可更改规则(模板)。

分析猫眼电影数据

https://www.maoyan.com/board/4?offset=0
有10部电影
https://www.maoyan.com/board/4?offset=10
又有10部电影,以此类图+10

分析其中一部电影的网页源码:

<dd>
                        <i class="board-index board-index-2">2</i>
    <a href="/films/1297" title="肖申克的救赎" class="image-link" data-act="boarditem-click" data-val="{movieId:1297}">
      <img src="//s3.meituan.net/static-prod01/com.sankuai.movie.fe.mywww-files/image/loading_2.e3d934bf.png" alt="" class="poster-default" />
      <img data-src="https://p0.pipi.cn/mmdb/fb7386020fa51b0fafcf3e2e3a0bbe694d17d.jpg?imageView2/1/w/160/h/220" alt="肖申克的救赎" class="board-img" />
    </a>
    <div class="board-item-main">
      <div class="board-item-content">
              <div class="movie-item-info">
        <p class="name"><a href="/films/1297" title="肖申克的救赎" data-act="boarditem-click" data-val="{movieId:1297}">肖申克的救赎</a></p>
        <p class="star">
                主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿
        </p>
<p class="releasetime">上映时间:1994-09-10(加拿大)</p>    </div>
    <div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">5</i></p>        
    </div>

      </div>
    </div>
</dd>

构造正则表达式:
<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>

提取数据保存

function ExtractMovies(const AInputString: string; ATemplate: string): string;
const
  MovieRE = '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>';
var
  r           : TRegExpr;
  OutputString: string;
begin
  Result := '';
  r      := TRegExpr.Create;
  try
    r.Expression := MovieRE;
    if r.Exec(AInputString) then
      repeat
        Result := Result + Format('{''image'':''%1s'',''actor'':''%2s'',''score'':''%3s'',''index'':''%4s'',''tit1e'':''%5s'',''time'':''%6s''}',
          [r.Match[2], Trim(r.Match[4]), r.Match[6] + r.Match[7], Trim(r.Match[1]), r.Match[3], r.Match[5]]) + sLineBreak;
      until not r.ExecNext;
  finally
    r.Free;
  end;
end;

返回数据:
在这里插入图片描述

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Delphi是一种面向对象的编程语言,它支持正则表达式使用正则表达式是一种强大的文本匹配工具,可以用于在字符串中查找、替换和提取特定模式的文本。 在Delphi中,可以使用TRegEx类来进行正则表达式的操作。下面是使用正则表达式的基本步骤: 1. 引入正则表达式单元: 在Delphi中,需要使用System.RegularExpressions单元来引入正则表达式相关的类和函数。 2. 创建TRegEx对象: 使用TRegEx类的Create方法创建一个TRegEx对象,可以指定一些选项来控制正则表达式的匹配行为。 3. 编写正则表达式模式: 正则表达式模式是用来描述要匹配的文本模式的字符串。可以使用各种元字符和特殊字符来构建模式,例如通配符、字符类、重复次数等。 4. 进行匹配操作: 使用TRegEx对象的IsMatch方法可以判断一个字符串是否与正则表达式模式匹配。使用Match方法可以获取匹配到的结果。 5. 处理匹配结果: 匹配结果是一个TMatch对象,可以通过该对象的Value属性获取匹配到的字符串。还可以通过Groups属性获取捕获组的内容。 下面是一个简单的示例代码,演示了如何在Delphi使用正则表达式: ```delphi uses System.RegularExpressions; var regex: TRegEx; input: string; pattern: string; match: TMatch; begin input := 'Hello, World!'; pattern := '\b\w+\b'; // 匹配单词 regex := TRegEx.Create(pattern); if regex.IsMatch(input) then begin match := regex.Match(input); while match.Success do begin Writeln(match.Value); match := match.NextMatch; end; end; end; ``` 上述代码中,使用正则表达式模式`\b\w+\b`来匹配字符串中的单词,并输出匹配到的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D-Nolan

请我喝杯咖啡吧,鼓励一下创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值