跳转到主要内容

正则表达式的使用

概述

A-Parser 中使用 Perl/JavaScript 兼容的正则表达式,可用于:

有关正则表达式的详细文档可以在以下资源中找到:

A-Parser 中,可以使用正则表达式处理任何结果,为此需要使用 Parse custom results (使用正则) 选项:

使用正则选项

使用特点与标志

  • 正则表达式书写时不带分隔符 //
  • 支持以下标志:
    • i - 搜索时不区分大小写
    • s - 点号匹配所有字符,包括换行符
    • g - 全局搜索或替换

此外,可以在正则表达式本身中指定标志,例如使用 m 标志(多行模式 - ^$ 分别作为行首和行尾)在整个文本(或页面代码,取决于正则表达式的应用对象)的每一行中搜索单词 test

(?m)^(.+?test.+?)$

提取任意信息

任务编辑器中正则表达式操作说明

通过 Parse custom results (使用正则) 选项或 结果生成器,可以使用正则表达式从数据抓取结果中提取任意信息,例如从 HTML 源代码或已准备好的结果中提取

  • Parse result (应用于) 中选择爬虫工具的结果,这可以是 简单结果或数组
  • 正则表达式不带分隔符,随后可以指定标志
  • Result type (结果类型) 中指定结果类型 - Flat(简单结果)或 Array(数组)。如果选择数组作为原始结果或使用了正则表达式的 g 标志,则结果将始终保存到数组中。在 Name (名称) 字段中指定数组名称
  • 正则表达式的每个捕获括号都可以保存为单独的元素,元素名称填写在相应的 $1 to, $2 to... 字段中 - 其中数字表示捕获括号的编号
  • RegEx (正则) 字段中可以使用 模板引擎,这允许将查询作为正则表达式的一部分使用

创建的新结果可用于 结果格式化结果生成器过滤结果去重,或用于下一个 Parse custom results (使用正则) 选项。 该选项与使用 RegEx Match 时的 结果生成器 类似

从 HTML 源代码抓取图片链接示例

为了解决这个问题,我们使用爬虫工具 Net::HTTPNet::HTTP 来获取页面的源代码。 对 $data(下载的页面)应用带有 isg 标志的正则表达式,将结果保存到 images 数组的 src 元素中。 在结果格式中指定通过换行符输出所有 src 元素。

最终针对查询 http://a-parser.com/ 进行数据抓取,在结果文件中将获得以下列表:

/img/lang/en.png  
/img/lang/ru.png
img/[email protected]
https://files.a-parser.com/img/site/tour_ru/V1qpV.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_1_all_parsers_list.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_1_quick_task.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_2_task_editor_easy.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_3_task_editor_analyze_domains.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_4_task_editor_parse_emails.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_5_queue_fast_google.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_6_queue_spyserp.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_7_javascript_parser.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_8_scheduler.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_9_settings.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_10_proxies.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_11_templates.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_12_task_tester.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_13_parser_test.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_14_api.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_15_resources.png
data/avatars/s/0/12.jpg?1507557563
data/avatars/s/0/12.jpg?1507557563
data/avatars/s/13/13392.jpg?1570706020
data/avatars/s/16/16560.jpg?1586782475
data/avatars/s/1/1240.jpg?1537376153
styles/uix/xenforo/avatars/avatar_s.png
data/avatars/s/0/371.jpg?1412969226
styles/uix/xenforo/avatars/avatar_s.png
//mc.yandex.ru/watch/26891250
下载示例

如何将示例导入 A-Parser


eJxtVN9v2jAQ/l8sJArqYH3YS7Stokhomxgwmj5BJlnkyLz612yHFUX533d2Egfa
vYDv7rvvvvNdXBFH7bPdGLDgLEl2FdHhTBKSw5GW3JFboqmxYHx4R1bgkuRLmm7Q
HxEVcWcNmHMorVNiC7ZJNM0BuaijwS7gBc2PTBS7n5+zsTWH/d6OP/mf3XBPspvJ
+H4UTh08bZiZLSJh66LG0DM6w/+KigATtAAbkV4zwSIkq3uR6gTGsBwQxXK0j8oI
6kwn+kR56WGDhmvShG+GgyBWDkekzrJYYBGiHq7vJu3dxeAjPUGqfAnGoXcv0Gr1
DvBmwEe7MqOJe/EMNM+ZY0pS3lTwnfRVnyT7E0RKhVg8GgZ2YZRAl4NA4J3nTt2O
DIJNkKIMuT+aHJIcKbdwSyxKXVAUkr+OMAeGOmXW2utBf0WUnHG+hBPwHhb4H0rG
c1yV2RGTvraJ/4es33DUsb3LUjisvwY1RJZgPay/91m5WqqiuwzOBHNo27kqpR/M
e3Q+A+h4ZysPE8pALNMyt9Xxa9Ag/Wb0I5vp3nXVxtVYrp0HJY+sWLfb1iFLmeIn
t5ZzJTQH35csOcexWNj26zGz7Ri80Qt8nTwPJa4+VqcUt98eG6naMFy/D16gwJu8
rNpSHijnT9vlZYT0K4XGL+e0TaZT+q55BiYHJabEJzooFK4UtlVn8ZGIT0l18VQk
VY1j+m03Dcb35BHow8uxOAOS3NX/AFJvlP8=

正则表达式构造器

从 1.2.78 版本开始,添加了正则表达式构造器。

可以在 Tools -> Regex Builder 选项卡中找到它。也可以直接在 测试抓取 中发送获取到的页面代码。为此需要开启 debug 模式并点击 Go to RegEx Builder 链接。

在正则表达式构造器中打开页面代码

在构造器中可以选择将要使用生成的正则表达式的编程语言。

要使用构造器,需要在左侧字段中粘贴源文本(或者在从 测试抓取 跳转 Go to Regex Builder 时自动粘贴)。在右侧配置未来正则表达式的参数。

要编写一个简单的正则表达式(例如,为了获取标题),只需指定所需的正则表达式元素即可。

  • Before group (组之前) 字段中输入位于所需信息之前的字符
  • After group (组之后) 字段中输入位于所需数据之后的字符
  • 组开始于 字段中指定搜索字符串应以哪些字符开始
  • Group ends with (组结束于) 字段中指定搜索字符串末尾应有的字符
使用正则表达式构造器获取标题的示例

如上图所示,我们正在编写一个用于提取网站 title 的正则表达式。在组之前放置 <title>,在组之后放置 </title>,此外作为示例,指定搜索字符串以字母 W 开始。

为了对生成的正则表达式进行全面测试,可以开启所需的标志:gsi

还可以编写包含 2 个或更多组的更复杂的正则表达式。 例如,尝试编写一个正则表达式来收集 <li> 列表中的所有链接和锚点。为此我们需要开启 g 标志并添加另一个搜索组,因为第一组将是链接,第二组将是锚点。

在正则表达式构造器中使用组的示例

为两组设置好所需参数后,得到正则表达式:

<li><a href="(.+?)">(.+?)<\/a

要检查正则表达式,请点击 测试 按钮:

在正则表达式构造器中检查创建的正则

执行正则表达式后,下方会显示其工作结果:完整字符串和捕获的组。双击结果表中的任何元素,起始文本将滚动到该匹配项所在的位置。