gpt4 book ai didi

ruby - 如何使用正则表达式从 HTML 中提取链接?

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:23 24 4
gpt4 key购买 nike

我想从 google.com 中提取链接;我的 HTML 代码如下所示:

<a href="http://www.test.com/" class="l"

我花了大约五分钟的时间才找到适用于 www.rubular.com 的正则表达式。它是:

"(.*?)" class="l"

代码是:

require "open-uri"
url = "http://www.google.com/search?q=ruby"

source = open(url).read()
links = source.scan(/"(.*?)" class="l"/)

links.each { |link| puts #{link}
}

问题是,它不输出网站链接。

最佳答案

那些链接实际上有class=l不是class="l" .顺便说一下,为了解决这个问题,我在方法中添加了一些日志记录,以便您可以查看各个阶段的输出并对其进行调试。我搜索了您期望找到的字符串,但没有找到,这就是您的正则表达式失败的原因。所以我寻找了你真正想要的正确字符串并相应地改变了正则表达式。调试技巧得心应手。

require "open-uri"
url = "http://www.google.com/search?q=ruby"

source = open(url).read

puts "--- PAGE SOURCE ---"
puts source

links = source.scan(/<a.+?href="(.+?)".+?class=l/)

puts "--- FOUND THIS MANY LINKS ---"
puts links.size

puts "--- PRINTING LINKS ---"
links.each do |link|
puts "- #{link}"
end

我还改进了您的正则表达式。你正在寻找一些以 a 标签开头的文本 ( <a ),然后是一些你不关心的某种字符 ( .+? ),一个 href 属性 ( href="),内容您要捕获的 href 属性 ( (.+?) )、一些空格或其他属性 ( .+? ),最后是类属性 ( class=l )。

我有 .+?在三个地方。 .表示任何字符,+意味着必须有一个或多个就在它之前,并且 ?意味着 .+应尝试匹配尽可能短的字符串。

关于ruby - 如何使用正则表达式从 HTML 中提取链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com