ColdFusion で Web スクレイピングを行っていますが、ほとんどすべてが正常に機能しています。私が得ている他の唯一の問題は、一部の URL の背後にテキストが含まれているため、現在エラーが発生していることです。
何が原因かはわかりませんが、おそらく私の正規表現です。とにかく、"http://" の前にテキストが表示される明確なパターンがあります。その前のすべてを単純に削除したいと思います。
あなたが助けることができる可能性はありますか?
たとえば、次の文字列を使用します。
"I'M OBSESSED WITH MY BEAUTIFUL FRIEND" src="http://scs.viceland.com/feed/images/uk_970014338_300.jpg
正規表現は私が時間を割くことができなかったので、あなたの助けに感謝します-願わくばいつの日か!
ありがとう。
編集:
やあ、
問題を引き起こしているのは最初の REGEX である可能性があるため、関数全体を投稿すると役立つと思いました。基本的に、この関数は 1 つの引数を取ります。この場合、それは (CFHTTP 経由の) HTML ファイルの内容です。
場合によっては、すべての 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>
この機能は動作します。ただし、一部のサイトではそうではありません。それは少し上に見えますが、その多くは、有効な画像パスを確実に取得するための特定の保護手段です。
お役に立てれば幸いです。
どうもありがとうございました。マイケル