platonai / exotic-amazon

A complete solution to crawl amazon at scale completely and accurately.
143 stars 46 forks source link

How to match the extraction configuration when the web page is redirected #17

Open sskmtm opened 1 year ago

sskmtm commented 1 year ago

如果一个网页在获取后发生了重定向,有什么办法可以配置:extract-config.json 中的patttern 匹配 重定向后的 url 呢?

platonai commented 1 year ago

一个网页有三个url:

1/ 数据库中的 key,也就是 WebPage.url,通常需要经过规范化,可以看 AmazonUrls 类

2/ WebPage.href,指网页中通过a标签提取出来的链接,它表示访问这个链接“应当能”打开目标网页

3/ WebPage.location,表示打开网页后浏览器中最终呈现的地址,它可能是经过跳转的

当你要访问一个网页时,系统内部以 WebPage.url为准,所以你的匹配规则应当匹配该链接,当你收集到一个链接准备采集之前,应当对其进行规范化。

当系统最终将一个网页采集请求发送到浏览器时,它优先使用WebPage.href,它可能带有随机参数,不是那么漂亮,但是它应当代表一个真人网上冲浪时点击一个链接时访问的实际链接。

---Original--- From: @.> Date: Mon, Mar 20, 2023 10:01 AM To: @.>; Cc: @.***>; Subject: [platonai/exotic-amazon] How to match the extraction configurationwhen the web page is redirected (Issue #17)

如果一个网页在获取后发生了重定向,有什么办法可以配置:extract-config.json 中的patttern 匹配 重定向后的 url 呢?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

sskmtm commented 1 year ago

extract-config.json 文件中配置的所有 rule 都会被解析成 ai.platon.scent.crawl.serialize.config.v1.ExtractRule

我想了解的是,在发生 重定向 的时候,ExtractRule 对象的 urlPattern 匹配的文本(url)是否可以自定义(比如,上面你说的location)。

可以重写什么方法做到吗?

platonai commented 1 year ago

一个网页在浏览器中发生重定向,不影响 WebPage.url,只是会将 WebPage.location 设置为最终浏览器中显示的链接。因此不应该出现你上面提及的情况。

你应当在采集该网页之前完成链接规范化,该规范化之后的链接,应该成为该网页唯一合法的“统一资源定位符”,譬如一个产品页面可能会以以下方式出现:

1. https://www.amazon.co.uk/dp/B0BS3ZRCCW?th=1
2. https://www.amazon.co.uk/4pcs-Wheel-Centre-Caps-Replacement/dp/B0BS3ZRCCW/ref=zg-bsnr_automotive_sccl_3/258-4903014-4534368?pd_rd_w=BHv9M&content-id=amzn1.sym.401f1a3a-5fa9-46fb-9ed2-7c7d241a11cd&pf_rd_p=401f1a3a-5fa9-46fb-9ed2-7c7d241a11cd&pf_rd_r=2YQWPCKBZ3AQNX97MTH2&pd_rd_wg=moQWE&pd_rd_r=a80bc1d3-fc5b-4b1b-93ce-4f4f77532037&pd_rd_i=B0BS3ZRCCW&psc=1
3. https://www.amazon.co.uk/4pcs-Wheel-Centre-Caps-Replacement/dp/B0BS3ZRCCW/ref=zg-bsnr_automotive_sccl_3

但是你应该将所有非标准形式统一成标准形式:

https://www.amazon.co.uk/dp/B0BS3ZRCCW

后面无论它怎么重定向,或者增加参数,标准形式是你在系统中唯一合法的URL,其他形式的URL只能作为参考。不建议基于 WebPage.location 做判断来执行某个规则。

sskmtm commented 1 year ago

您说的这种情况知识url的变种,并不是重定向

我说的是下面这种情况:

原始url:   `https://www.amazon.com/gp/profile/amzn1.account.AFZB7W6UM64P5D3NKZ4DEZV4ORYA`
重定向url:  `https://www.amazon.com/shop/faithhelizabethh?ref=prof_o_infl`

上面这种情况是没办法规范化的吧?

sskmtm commented 1 year ago

https://www.amazon.com/gp/profile/amzn1.account.xxxxxxx 这种类型的 url 也存在不重定向的情况:

`https://www.amazon.com/gp/profile/amzn1.account.AHSSB7T6SHD3SXATB5DXGXL2NCXQ`

所以我想了解一下是否可以有方法自定义 extract-config.json 文件中的匹配逻辑,可以匹配重定向之后的 url,否则无法没解析

platonai commented 1 year ago

没有这样的逻辑,可以匹配重定向之后的 url。

  1. 如果每一个特定模式的输入链接都会跳转到另一个固定模式的链接,那么直接在输入链接上做匹配即可
  2. 如果 1 不成立,那么你需要手写一些代码处理这类逻辑。你可以将待采集链接创建为一个 ListenableHyperlink, 注册 onHTMLDocumentParsed 的事件处理器,在这个事件处理器中执行 X-SQL 来提取字段。

相关链接:

  1. PulsarR 系列课程 7 - 事件处理
  2. EventHandler Example
  3. 综合运用事件处理器和 X-SQL - PulsarR 的 REST 服务
  4. 事件处理的复杂案例 - 大众点评网