我正在使用 ColdFusion 进行一些网络抓取,并且大多数情况下一切正常。我得到的唯一其他问题是某些 URL 后面带有文本,现在导致错误。
不知道是什么原因造成的,但它可能是我的正则表达式。无论如何,文本出现在“http://”之前有一种独特的模式。我想简单地删除它之前的所有内容。
你有什么可以帮忙的机会吗?
以这个字符串为例:
"I'M OBSESSED WITH MY BEAUTIFUL FRIEND" src="http://scs.viceland.com/feed/images/uk_970014338_300.jpg
我非常感谢您的帮助,因为正则表达式不是我设法腾出时间的东西 - 希望有一天我会!
谢谢。
编辑:
你好,
我认为发布我的整个函数可能会有所帮助,因为它可能是我最初的 REGEX 导致了这个问题。基本上,该函数接受一个参数。在这种情况下,它是 HTML 文件的内容(通过 CFHTTP)。
在某些情况下,每个 URL 看起来都可以正常工作。例如,如果我尝试 digg.com,它可以工作......但它会在 youtube.com 之类的东西上死掉。我想这将取决于他们特定的 HTML 格式。无论哪种方式,我所需要的只是图像标签上 SRC 属性的值。
这是我到目前为止所拥有的:
<cffunction name="extractImages" returntype="array" output="false" access="public" displayname="extractImages">
<cfargument name="fileContent" type="string" />
<cfset var local = {} />
<cfset local.images = [] />
<cfset local.imagePaths = [] />
<cfset local.temp = [] />
<cfset local.images = reMatchNoCase("<img([^>]*[^/]?)>", arguments.fileContent) />
<cfloop array="#local.images#" index="local.i">
<cfset local.temp = reMatchNoCase("(""|')(.*)(gif|jpg|jpeg|png)", local.i) />
<cfset local.path = local.temp />
<cfif not arrayIsEmpty(local.path)>
<cfset local.path = trim(replace(local.temp[1],"""","","all")) />
<cfset arrayAppend(local.imagePaths, local.path) />
</cfif>
<cfif isValid("url", local.path)>
<cftry>
<cfif fileExists(local.path)>
<cfset arrayAppend(local.imagePaths, local.path) />
</cfif>
<cfcatch type="any">
<cfset application.messagesObject.addMessage("error","We were not able to obtain all available images on this page.") />
</cfcatch>
</cftry>
</cfif>
</cfloop>
<cfset local.imagePaths = application.udfObject.removeArrayDuplicates(local.imagePaths) />
<cfreturn local.imagePaths />
</cffunction>
此功能有效。但是,在某些网站上,并非如此。它看起来有点过头,但其中大部分只是确保我获得有效图像路径的某些保护措施。
希望你能帮忙。
再次感谢。迈克尔