【问题标题】:Regex, grab only the image URL with items that have a dollar sign to begin with正则表达式,仅获取带有以美元符号开头的项目的图像 URL
【发布时间】:2018-05-21 03:43:20
【问题描述】:

所以,我知道这听起来有点奇怪,但基本上这是我的 HTML 示例:

$400 + free shipping</title>
   <link>https://www.dealnews.com/Samsung-50-4-K-HDR-LED-Smart-TV-for-400-free-shipping/17336849.html?iref=rss-dealnews-editors-choice</link>
   <description>&lt;img src='http://c.dlnws.com/image/upload/f_auto,t_large,q_auto/content/vdiy8a75wg8v7bo92dhq'

我只想捕获前面有美元符号的项目的 URL,例如$.... 之后的所有内容都比(URL) 目前我的正则表达式是这样的:

img src='([^']+)'.*

这会抓取每一个 img src,但是我只希望像我之前说的那样在它前面有“$”符号的图像,基本上我不想要任何与此 HTML 页面上的产品无关的图像.

【问题讨论】:

  • 先阅读这里:stackoverflow.com/a/1732454
  • 您真正要寻找的是结合 xpath 表达式的称为 parser(例如 lxmlBeautifulsoup)。虽然使用正则表达式肯定可以得到有问题的图像 url,但它很容易出错。

标签: python html regex


【解决方案1】:

查看您提供的 HTML 示例,您的产品图片前面似乎直接带有 &lt;description&gt; HTML 标记。直接在所需 URL 之前使用非捕获组而不是一路回溯到潜在的(但未授予)$ 符号所需的处理能力(和时间)更少。如果您将 &lt;description&gt; 标记专门用于产品,则此正则表达式将满足您的需求: (?:&lt;description&gt;&amp;lt;img src=')([^']+)

其他需要考虑的事项:

  • 如果您需要对 HTML 代码中的多行进行此项检查,请务必添加 Global 和 Multiline 修饰符。
  • 如果您需要考虑 HTML 实体并允许将 HTML 实体与已解析的 HTML 组合在一起,请考虑创建 OR 语句以允许它们在您的 Regex 中使用。例如,要允许 &amp;lt;&amp;lt;img 标记之前使用: (?:&lt;description&gt;(?:&amp;lt;|&lt;)img src=')([^']+) 如果我们同时考虑到描述标签的打开和关闭实体,我们最终会得到:(?:(?:&amp;lt;|&lt;)description(?:&amp;gt;|&gt;)(?:&amp;lt;|&lt;)img src=')([^']+)

【讨论】:

  • 我的问题是有时有些产品是免费的,我不想要它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2017-09-20
  • 2021-03-24
  • 2014-11-13
相关资源
最近更新 更多