Web Scraper 正则匹配数字案例

奇技淫巧 tesths 1年前 (2019-11-24) 2782次浏览 0个评论

在 Web Scraper 抓取过程中,经常遇到需要获取数字的情况。下面以抓取携程酒店介绍为例,说明如何在 Web Scraper 中使用正则表达式来匹配数字。

前言

本文使用的 sitemap 如下,可导入 sitemap 后根寻教程一步一步进行实践操作。

{"_id":"ctrip","startUrl":["https://hotels.ctrip.com/hotel/2151817.html#ctm_ref=www_hp_bs_lst"],"selectors":[{"id":"element","type":"SelectorHTML","parentSelectors":["_root"],"selector":".htl_room_txt > p:nth-of-type(1)","multiple":false,"regex":"","delay":0}]}

本文要抓取的数据是下图开业时间,装修时间,房间数的数字。Web Scraper 本身无法单独选择其中每个字段,所以需要使用正则表达式

Web Scraper 正则匹配数字案例

1、Web Scraper 的正则匹配

正则表达式的匹配结果可以有很多个,比如当我们匹配数字的时候,会有很多个满足的结果。

根据 Web Scraper 的文档中说明,Web Scraper 使用正则表达式的时候默认只取第一个匹配的结果。

我们这里在 Web Scraper 的 Type 中选择 HTML 进行抓取(HTML 中信息更多,也可使用 Text)

Web Scraper 正则匹配数字案例

抓取结果的预览是

Web Scraper 正则匹配数字案例

2、匹配数字

正则表达式中,匹配数字使用的是 \d。在这里 \d 匹配的是一个数字,但是会匹配多个满足的结果,1 中说过 Web Scraper 只取第一个匹配的结果。

我们在 Web Scraper 的 Regex 打 \d 查看匹配结果。

Web Scraper 正则匹配数字案例

用 Data preview 查看结果

Web Scraper 正则匹配数字案例

这是因为在 1 中我们说过,Web Scraper 只会默认匹配第一个符合的结果,所以只匹配了 HTML 文件中的第一个数字 2。

3、匹配一个或多个数字

匹配一个或多个数字是在 \d 的后方加上 +,写为 \d+。

在 Web Scraper 的 Regex 中写上 \d+

Web Scraper 正则匹配数字案例

用 Data preview 查看结果

Web Scraper 正则匹配数字案例

这里三个数字都满足,但是因为 Web Scraper 只会默认匹配第一个符合的结果,所以只匹配了第一个连续数字 2009。

4、匹配固定位数的数字

匹配固定位数的数字是在 \d 的后方加上 {数字个数}。在案例中,我们用这种方法尝试匹配开业时间的年份。由于开业时间年份是 4 位数字,所以在这个地方写为 \d{4}。

在 Web Scraper 的 Regex 中写上 \d{4}

Web Scraper 正则匹配数字案例

用 Data preview 查看结果

Web Scraper 正则匹配数字案例

5、匹配文字之前的数字

由于 Web Scraper 在匹配的时候,只会默认匹配多个可能性中的第一个。所以在本案例中如果要抓取 2018 年装修,就必须结合后面的 年装修 进行匹配。

匹配文字之前的正则表达式是(?=文字),需结合匹配多个数字使用。我们匹配装修年份就写成 \d+(?=年装修) 或写为 \d{4}(?=年装修) 都可

在 Web Scraper 的 Regex 中写上 \d+(?=年装修)

Web Scraper 正则匹配数字案例

用 Data preview 查看结果

Web Scraper 正则匹配数字案例

6、匹配数字长度区间

在我们这个案例中,有一个房间数,在这个网页中是 62。除了可以使用 \d+ 之外。我们可以写 \d{2},但是 \d{2} 会只匹配 2 位数字,如果抓取的网页是 123 间房,就无法进行匹配。此时可以针对数字长度的区间设置匹配数字的长度,写为 \d{长度 1,长度 2}。我们在此案例,房间数可能是 2 位数字到 3 位数的长度。我们写成 \d{2,3}。如果房间可能有 10-9999 间,则写为 \d{2,4}。

在 Web Scraper 的 Regex 中写上 \d{2,3}(?=间房)

Web Scraper 正则匹配数字案例

用 Data preview 查看结果

Web Scraper 正则匹配数字案例

7、匹配数字和文字结合

在此案例中,如果需要获取完整的 2009 年开业。则需要把后面的文字一起获取。匹配文字的正则表达式是 (文字)。在这里写为\d+(年开业) 或 \d{4}(年开业)。

在 Web Scraper 的 Regex 中写上\d+(年开业)

Web Scraper 正则匹配数字案例

用 Data preview 查看结果

Web Scraper 正则匹配数字案例

喜欢 (28)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址