webForumDet fria alternativet

Problem med RegExp

6 svar · 354 visningar · startad av lilja

liljaMedlem sedan juli 20041 183 inlägg
#1

Jag vill hämta nyheter ifrån en hemsida och spara i en databas. Om ni undrar om jag har tilltånd så har jag pratat med sidans ägare och fått tillåtelse att göra det.

För att sortera ut de olika nyheterna använder jag regexp. Tidigare har jag använt nästan exakt samma skript. Anledningen till att jag inte kan göra det nu är att inte alla nyheter innehåller en "länk för att läsa mer" som tidigare.

Tidigare hämtade jag alla rubriker, alla datum och alla länkar för sig. Men om en nyhet inte har någon länk så tilldelas den länken för nästkommande nyhet (om den har en länk).

Därför måste jag hämta en nyhet i taget och sedan använda regexp på den igen för att få ut de olika delarna. Men jar går hela tiden felet som ni kan se här: http://jok.nu/layout_05/test/nyheter/smof.asp

Raden som är i fetstil är den raden som servern klagar på. Snälla hjälp mig. jag blir galen!!

<%
	
	Dim tSMOFNews(4)
	Dim tSMOFNewsDate(4)
	Dim tSMOFNewsHeader(4)
	Dim tSMOFNewsLink(4)

	' Skapar ett XMLHttp objekt för att hämta SMOF nyheterna från internet
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	' Sidan som ska hämtas
	objHTTP.Open "GET", "http://www.orientering.se/smaland", False
	' Hämtar sidan
	objHTTP.Send
	'Omvandlar sidan från binär till text så att å, ä och ö syns
	strHTML = BinToText(objHTTP.responseBody,35000)
	' Tömmer XMLHttp objektet vi skapade
	Set objHTTP = Nothing

	' Hämtar en Nyhet i taget för att sedan dela upp den i olika delar
	Set objRegExp = New regexp
	' Anger att den ska fortsätta även om den hittat en
	objRegExp.Global = true
	' Anger att det inte är någon skillnad på stora och små bokstäver
	objRegExp.IgnoreCase = true
	' Skapar ett mönster som den ska söka efter. En .* anger allt
	objRegExp.Pattern = "<table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%""><tr><td><span class=""newslinkdate"">.*<br><br></td></tr></table>"
	' Skapar en array av den hittade datan
	[B]Set tSMOFNews = objRegExp.Execute(strHTML)[/B] 
	Set objRegExp = Nothing

	For i = 0 To 4
		' Skapar en RegExp för att plocka ut datumen på nyheterna
		Set objRegExp = New regexp
		' Anger att den ska fortsätta även om den hittat en
		objRegExp.Global = true
		' Anger att det inte är någon skillnad på stora och små bokstäver
		objRegExp.IgnoreCase = true
		' Skapar ett mönster som den ska söka efter. En .* anger allt
		objRegExp.Pattern = "<span class=""newslinkdate"">.*</span><br><span class=""newsheader"">"
		' Skapar en array av den hittade datan
		Set tSMOFNewsDate = objRegExp.Execute(tSMOFNews(i))
		Set objRegExp = Nothing
	
		' Skapar en RegExp för att plocka ut rubriken på nyheterna
		Set objRegExp = New regexp
		' Anger att den ska fortsätta även om den hittat en
		objRegExp.Global = true
		' Anger att det inte är någon skillnad på stora och små bokstäver
		objRegExp.IgnoreCase = true
		' Skapar ett mönster som den ska söka efter. En .* anger allt
		objRegExp.Pattern = "<span class=""newsheader"">.*</span>"
		' Skapar en array av den hittade datan
		Set tSMOFNewsHeader = objRegExp.Execute(tSMOFNews(i))
		Set objRegExp = Nothing
	
		' Skapar en RegExp för att plocka ut länkarna till nyheterna
		Set objRegExp = New regexp
		' Anger att den ska fortsätta även om den hittat en
		objRegExp.Global = true
		' Anger att det inte är någon skillnad på stora och små bokstäver
		objRegExp.IgnoreCase = true
		' Skapar ett mönster som den ska söka efter. En .* anger allt
		objRegExp.Pattern = "<a href=.*>L&auml;s mer</a>"
		' Skapar en array av den hittade datan
		Set tSMOFNewsLink = objRegExp.Execute(tSMOFNews(i))
		Set objRegExp = Nothing

	Next
%>
liljaMedlem sedan juli 20041 183 inlägg
#2

är det verkligen ingen som har den blekaste aning om vad felet kan vara? :'(

J.N.Medlem sedan apr. 20031 660 inlägg
#3

HEJ!

Får du något i strHTML?

Kontrollera att den innehåller vad du tror att den innehåller.

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Du måste escape:a slasharna, eftersom dessa är specialtecken i RegExp.

objRegExp.Pattern = "...<\/tr><\/td><\/table>"

Det ser även ut som om du saknar en </span>-tagg i det mönstret.

liljaMedlem sedan juli 20041 183 inlägg
#5

ja jag vet att strHTML innehåller det jag tror att den gör... Åtminstonne då sidan ligger uppe som jag hämtar data ifrån...

Just de, har inte skrivit så väldigt mycket RegExp-kod så jag tänkte inte på slash-tecknen. Det borde fungera :) Ska testa om det fungerar...

Finns det någon bra sida där man kan läsa om hur man skriver sk. mönster till RegExp om man är nybörjare???

Hmm, en av de 3 sidor jag hämtar just nu ligger inte uppe heller. Dåligt då det är hemmet för hela orienteringssverige... Aja, hur kollar man om sidan finns (ligger uppe)?

On Error Resume Next - och sen kollar eventuella felkoder? Hur kollar man felkoderna i sådana fall??

J.N.Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Felkoder hittar du i variabeln err.
http://www.devguru.com/Technologies/vbscript/quickref/err.html

Det fanns ett inlägg om ett regexp-test nyligen, testa sök. (Ev kanske Javascript?)

Ang om sidan finns har jag läst att ni/de kontrollerar om man får ett 200-svar, dvs att sidan existerar, och sedan hämtar man datan.

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#7

Engine^ skrev:

Du måste escape:a slasharna, eftersom dessa är specialtecken i RegExp.

Nej, det är dom inte.

130 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)