Hur bygger man en sökrobot?
Hur bygger man en sökrobot som automatiskt sparar hem inehåll från sidor i en mySQL databas efter vissa kriterier?
Vilket språk skriver man den i, någon som kan hänvisa till artikel / guide?
Svara
Sv: Hur bygger man en sökrobot?
Alexander,
Detta är inte en fråga för Lokaliserings-forumen. Ställ frågan i ett mer lämpligt forum, förslags vis ett forum (givetvis här på pellesoft :) som riktar sig till det programmeringsspråk du använder dig av.
Svara
Sv:Hur bygger man en sökrobot?
det är väl precis rätt forum... hur lokaliserar man information... ;-)
En liten beskrivning av vad vi menar med lokalisering kanske hade varit på plats. Alla pratar ju inte samma "fikon" språk...
Svara
Sv: Hur bygger man en sökrobot?
Jag håller på med ett spindelprogram, jag använder Powerbasic. Nedan har du koden för den första utgåvan av programmet, senare utgåvor är mer specialiserade mot mitt primära syfte, att få tag på ny svenska ord.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | ' PROGRAM-NAMN SPINDEL1.BAS ' FÖRFATTARE FIM WÄSTBERG. ' DATUM 2005-02-14 18:04 I JÄRFÄLLA. ' ' SPINDEL. HÄMTNING AV NÄSTAN ALLA SIDOR INOM EN WEBSAJT ' ' ÄNDRINGS- OCH RÄTTNINGS-JOURNAL ' Vers Tidpunkt Ändringsbeskrivning ' ------- ---------------- -------------------------------- ' 2005-02-14 18:04 Nytt program ' Nationella gemena = †† „„ ”” å ä ö ' Nationella versaler = ŽŽ ™™ Å Ä Ö ' Fullständig URL ska anges som parameter ' KOMPILATORDIREKTIV ' ================== ' %port = 80 #COMPILER PBCC #DIM ALL ' FUNKTIONS-DEKLARATIONER ' ======================== ' DECLARE FUNCTION SKRIV_TAL(TAL AS LONG, RADNR AS LONG, KOLNR AS LONG) AS LONG DECLARE FUNCTION GetCurrentProcessId LIB "KERNEL32.DLL" ALIAS "GetCurrentProcessId" () AS LONG 'Option Explicit FUNCTION PBMAIN() AS LONG WEB_DATA: DIM buffer AS STRING DIM FIL_DATA AS STRING DIM FIL_HUVUD AS STRING DIM FIL_DATA_REST AS STRING DIM SLASK AS STRING URL_DATA: DIM URL_NORMALISERAD_UVA AS STRING DIM FIL_LANGD AS LONG DIM URL_SAJT_AKTUELL AS STRING DIM URL_SAJT AS STRING DIM URL_FIL AS STRING DIM URL AS STRING UT_DATA: DIM UTFIL_NAMN AS STRING DIM UTFIL_NAMN_FORLED AS STRING DIM UTFIL_NAMN_PDF AS STRING DIM TIDEN AS STRING DIM DAGENS_DATUM AS STRING DIM BOKSTAV AS STRING DIM FIL_SUFFIX AS STRING DIM STATUSFIL AS STRING DATABAS_DATA: DIM POST_UVA AS STRING DIM DATABASNAMN AS STRING DIM FILSLUT AS LONG DIM DATABAS_HANDTAG AS LONG DIM RETURKOD AS LONG DIM TYST_LAGE AS LONG DIVERSE: DIM PID AS LONG DIM PID_TEXT AS STRING DIM BILD AS LONG DIM START_TID AS LONG DIM LOGGFIL AS STRING DIM PA_TID AS LONG DIM PA_TID_MIN AS LONG DIM HASTIGHET AS LONG DIM KOMRAD AS STRING DIM BINAR_DATA AS STRING DIM SVAR AS LONG DIM AVBRYT AS LONG ANTALSRAKNARE: DIM ANTAL_HAMTADE_FILER AS LONG DIM ANTAL_FEL AS LONG DIM ANTAL_HAMTADE_BLOCK AS LONG DIM R AS LONG DIM ANTAL_HAMTADE_BYTE AS LONG URL_TABELL: DIM URL_FIL_TAB (1:1000000) AS STRING DIM ANTAL_URL_FIL_TAB AS LONG DIM NR_TAB AS LONG FIL_NUMMER: DIM FILNR_LOGGFIL AS LONG DIM FILNR_SAJTFIL AS LONG DIM FILNR_TCP AS LONG DIM FILNR_UTFIL AS LONG DIM FILNR_UTFIL_PDF AS LONG PARAMETERHAMTNING: '================= ' HAMTA_PARAMETRAR: URL_SAJT_AKTUELL = LCASE$(TRIM$(COMMAND$)) IF LEN (URL_SAJT_AKTUELL) = 0 THEN PRINT "URL som parameter saknas" GOTO PROGRAMSLUT END IF STARTSEKVENS: '============ ' STARTVARDEN: ON ERROR GOTO FELBEHANDLING NR_TAB = 0 UTFIL_NAMN = "" URL_FIL = "" START_TID = TIMER BYGG_BINAR_DATA: BINAR_DATA = "" FOR R = 0 TO 7 BINAR_DATA = BINAR_DATA + CHR$(R) NEXT R HAMTA_PID: PID = GetCurrentProcessId PID_TEXT = MID$(STR$(PID), 2) STARTA_UTFILER: LOGGFIL = URL_SAJT_AKTUELL + ".logg" FILNR_LOGGFIL = FREEFILE OPEN LOGGFIL FOR OUTPUT AS #FILNR_LOGGFIL UTFIL_NAMN = URL_SAJT_AKTUELL + ".htm FILNR_UTFIL = FREEFILE OPEN UTFIL_NAMN FOR OUTPUT AS #FILNR_UTFIL CLOSE #FILNR_UTFIL BILDSTART: IF TYST_LAGE THEN GOTO BILDSTART_END COLOR 14,1 CLS LOCATE 1, 1 PRINT "URL-sajt =" ' 1 PRINT "URL-fil =" ' 2 PRINT "PID =" ' 3 PRINT "Hämtade block =" ' 4 PRINT "Antal h„mtade =" ' 5 PRINT "Antal filer =" ' 6 PRINT "Kbytes/sek =" ' 7 PRINT "Antal fel =" ' 8 PRINT "H„mtade kbytes =" ' 9 PRINT "Totaltid min =" ' 10 LOCATE 1, 17 PRINT URL_SAJT_AKTUELL LOCATE 3, 17 PRINT PID BILDSTART_END: HAMTNING_AV_WEBSIDA: '===================== ' HAMTNING_AV_WEBSIDA_START: ON ERROR GOTO HAMTNING_AV_WEBSIDA_FEL IF INKEY$ = CHR$(27) THEN AVBRYT = 1 GOTO SLUTSEKVENS END IF LOCATE 2,17: PRINT SPACE$(50) LOCATE 2,17: PRINT MID$(URL_FIL, 1, 50) LOCATE 4,17: PRINT " 0 " ANTAL_HAMTADE_BLOCK = 0 LOGGNING: PRINT #FILNR_LOGGFIL, URL_FIL ANSLUTNING_TILL_WEBSAJTEN: FILNR_TCP = FREEFILE TCP OPEN PORT %port AT URL_SAJT_AKTUELL AS #FILNR_TCP TIMEOUT 5000 IF ERR THEN LOCATE 12,1 PRINT "Den sajten finns inte" GOTO SLUTSEKVENS END IF BEGAR_HAMTNING_AV_INFILEN: TCP PRINT #FILNR_TCP, "GET " + "/" + URL_FIL + " HTTP/1.0" TCP PRINT #FILNR_TCP, "Accept: */*" TCP PRINT #FILNR_TCP, "Accept-Language: en-us" TCP PRINT #FILNR_TCP, "Host: " + URL_SAJT_AKTUELL TCP PRINT #FILNR_TCP, "Pragma: no-cache" '' TCP PRINT #FILNR_TCP, "Referer: http://www.google.com" ' TCP PRINT #FILNR_TCP, "User-Agent: webget 1.3 (www.powerbasic.com)" TCP PRINT #FILNR_TCP, "User-Agent: Spindel1 (www.ordkors.se)" TCP PRINT #FILNR_TCP, "" HAMTNING_AV_INFILEN_START: FIL_DATA = "" HAMTNING_AV_INFILEN_NASTA_4096_BYTES: TCP RECV #FILNR_TCP, 4096, BUFFER FIL_DATA = FIL_DATA + BUFFER IF LEN(BUFFER) > 0 THEN INCR ANTAL_HAMTADE_BLOCK LOCATE 4, 17 PRINT ANTAL_HAMTADE_BLOCK GOTO HAMTNING_AV_INFILEN_NASTA_4096_BYTES END IF TCP CLOSE #FILNR_TCP INCR ANTAL_HAMTADE_FILER SVAR = SKRIV_TAL(ANTAL_HAMTADE_FILER, 5, 17) ANTAL_HAMTADE_BYTE = ANTAL_HAMTADE_BYTE + LEN(FIL_DATA) PA_TID = TIMER - START_TID IF PA_TID < 0 THEN PA_TID = PA_TID + 86400 HASTIGHET = ANTAL_HAMTADE_BYTE / PA_TID / 1000 PA_TID_MIN = PA_TID / 60 SVAR = SKRIV_TAL(HASTIGHET, 7, 17) SVAR = SKRIV_TAL (PA_TID_MIN, 10, 17) SVAR = SKRIV_TAL(ANTAL_HAMTADE_BYTE / 1000, 9, 17) SKILJ_PA_HUVUD_OCH_KROPP: FIL_HUVUD = EXTRACT$(FIL_DATA, CHR$(13) + CHR$(10) + CHR$(13) + CHR$(10)) FIL_DATA = TRIM$(REMAIN$(FIL_DATA, CHR$(13) + CHR$(10) + CHR$(13) + CHR$(10))) IF LEN(FIL_DATA) > 0 THEN GOTO HAMTNING_AV_WEBSIDA_END IF INSTR(LCASE$(FIL_HUVUD), "location:" ) > 0 THEN FIL_DATA = LCASE$(FIL_HUVUD) REPLACE "Location:" WITH " href=" IN FIL_DATA END IF GOTO HAMTNING_AV_WEBSIDA_END HAMTNING_AV_WEBSIDA_FEL: ON ERROR GOTO FELBEHANDLING PRINT #FILNR_LOGGFIL, "HAMTNING_AV_WEBSIDA FELNR=" ;ERR ERRCLEAR INCR ANTAL_FEL SVAR = SKRIV_TAL(ANTAL_FEL, 8, 17) TCP CLOSE #FILNR_TCP HAMTNING_AV_WEBSIDA_END: LAGRING_AV_HAMTAD_FIL: '===================== ' LAGRING_AV_FILEN_START: ON ERROR GOTO LAGRING_AV_HAMTAD_FIL_FEL LOCATE 4, 17 PRINT "L " ; URL_FIL = TRIM$(URL_FIL) ' IF LEN(URL_FIL) = 0 THEN GOTO LAGRING_AV_HAMTAD_FIL_END ' IF LEN(URL_FIL) = 0 THEN URL_FIL = URL_SAJT_AKTUELL FASTSTALL_DOKUMENTTYP: IF INSTR(UCASE$(URL_FIL), ".PDF" ) > 0 THEN GOTO LAGRA_PDF_FIL IF UCASE$(MID$(FIL_DATA, 1, 5)) = "%PDF-" THEN GOTO LAGRA_PDF_FIL IF INSTR(FIL_DATA, ANY BINAR_DATA) > 0 THEN GOTO LAGRING_AV_HAMTAD_FIL_END GOTO LAGRA_TEXT_FIL LAGRA_PDF_FIL: TIDEN = TIME$ UTFIL_NAMN_PDF = URL_SAJT_AKTUELL + "-" + MID$(TIDEN, 1, 2) + "." + MID$(TIDEN, 4, 2) + "." + MID$(TIDEN, 7, 2) + ".PDF" FILNR_UTFIL_PDF = FREEFILE OPEN UTFIL_NAMN_PDF FOR OUTPUT AS #FILNR_UTFIL_PDF PRINT #FILNR_UTFIL_PDF, FIL_DATA CLOSE #FILNR_UTFIL_PDF GOTO LAGRING_AV_HAMTAD_FIL_END LAGRA_PDF_FIL_END: LAGRA_TEXT_FIL: OPEN UTFIL_NAMN FOR APPEND AS #FILNR_UTFIL PRINT #FILNR_UTFIL, FIL_DATA CLOSE #FILNR_UTFIL GOTO LAGRING_AV_HAMTAD_FIL_END LAGRING_AV_HAMTAD_FIL_FEL: ON ERROR GOTO FELBEHANDLING PRINT #FILNR_LOGGFIL, "LAGRING_AV_HAMTAD_FIL FELNR=" ;ERR ERRCLEAR ' CLOSE GOTO LAGRING_AV_HAMTAD_FIL_END LAGRING_AV_HAMTAD_FIL_END: UTTAGNING_AV_HREF_I_FILEN: '========================= ' ON ERROR GOTO FELBEHANDLING LOCATE 4, 17 PRINT "H " ; JUSTERINGAR_AV_FIL_DATA: REPLACE "'" WITH CHR$(34) IN FIL_DATA REPLACE "==" WITH "=" IN FIL_DATA REPLACE "../" WITH "" IN FIL_DATA REPLACE "HREF=" WITH "href=" IN FIL_DATA REPLACE "Href=" WITH "href=" IN FIL_DATA FIL_DATA = TRIM$(FIL_DATA) SOKNING_AV_URL_START1: FIL_DATA_REST = TRIM$(REMAIN$(FIL_DATA, " href=" )) IF LEN(FIL_DATA_REST) = 0 THEN GOTO UTTAGNING_AV_HREF_I_FILEN_END GOTO START_UTTAGNING_AV_URL START_UTTAGNING_AV_URL: IF MID$(FIL_DATA_REST,1, 1) = CHR$(34) THEN GOTO UTTAGNING_AV_URL_MED_CITTATIONSTECKEN GOTO UTTAGNING_AV_URL_MED_MELLANSLAG UTTAGNING_AV_URL_MED_MELLANSLAG: URL = EXTRACT$(FIL_DATA_REST, " " ) FIL_DATA = REMAIN$(FIL_DATA_REST, " " ) GOTO RENSNING_AV_URL UTTAGNING_AV_URL_MED_CITTATIONSTECKEN: FIL_DATA_REST = MID$(FIL_DATA_REST, 2) ' Första cittationstecken tas bort URL = EXTRACT$(FIL_DATA_REST, CHR$(34)) FIL_DATA = REMAIN$(FIL_DATA_REST, CHR$(34)) RENSNING_AV_URL: URL = TRIM$(URL) IF INSTR(LCASE$(URL), "mailto:" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(LCASE$(URL), "javascript:" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(LCASE$(URL)+ " " , ".exe" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF URL = "/" THEN GOTO SOKNING_AV_URL_START1 IF MID$(URL, 1, 1) = "/" THEN URL = MID$(URL, 2) UTTAGNING_AV_URL_SAJT_OCH_URL_FIL: URL_SAJT = URL_SAJT_AKTUELL URL_FIL = URL URL_SAJT = EXTRACT$(MID$(URL, 8), "/" ) IF MID$(URL_SAJT, LEN(URL_SAJT), 1) = "/" THEN URL_SAJT = MID$(URL_SAJT, 1, LEN(URL_SAJT) - 1) URL_FIL = REMAIN$(MID$(URL, 8), "/" ) IF MID$(URL_FIL, LEN(URL_FIL), 1) = "/" THEN URL_FIL = MID$(URL_FIL, 1, LEN(URL_FIL) - 1) UTTAGNING_AV_URL_SAJT__OCH_URL_FIL_END: BORTTAG_AV_SNESTRECK_I_SLUTET: IF MID$(URL_SAJT, LEN(URL_SAJT), 1) = "/" THEN URL_SAJT = MID$(URL_SAJT, 1, LEN(URL_SAJT) - 1) IF MID$(URL_FIL, LEN(URL_FIL), 1) = "/" THEN URL_FIL = MID$(URL_FIL, 1, LEN(URL_FIL) - 1) TEST_PA_URL_SAJT: IF UCASE$(URL_SAJT) <> UCASE$(URL_SAJT_AKTUELL) THEN GOTO SOKNING_AV_URL_START1 EXLUDERA_VISA_FILTYPER: IF INSTR(URL_FIL, ".bat" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(URL_FIL, ".mp3" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(URL_FIL, ".exe" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(URL_FIL, ".gif" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(URL_FIL, ".jpg" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(URL_FIL, ".bmp" ) > 0 THEN GOTO SOKNING_AV_URL_START1 IF INSTR(URL_FIL, ".doc" ) > 0 THEN GOTO SOKNING_AV_URL_START1 SOK_URL_FIL: FOR R = 1 TO ANTAL_URL_FIL_TAB IF URL_FIL_TAB (R) = URL_FIL THEN GOTO SOKNING_AV_URL_START1 NEXT R INCR ANTAL_URL_FIL_TAB IF ANTAL_URL_FIL_TAB > 1000000 THEN LOCATE 10,1 PRINT "URL_FIL_TAB för liten" GOTO SLUTSEKVENS END IF URL_FIL_TAB (ANTAL_URL_FIL_TAB) = URL_FIL GOTO SOKNING_AV_URL_START1 UTTAGNING_AV_HREF_I_FILEN_END: START_HAMTNING_AV_NY_SIDA: '======================== ' NAST_RAD: INCR NR_TAB IF NR_TAB > ANTAL_URL_FIL_TAB THEN GOTO SLUTSEKVENS URL_FIL = URL_FIL_TAB (NR_TAB) SVAR = SKRIV_TAL(ANTAL_URL_FIL_TAB, 6, 17) GOTO HAMTNING_AV_WEBSIDA FELBEHANDLING: '============= ' LOCATE 10,1 PRINT "FEL=" ; ERR PRINT #FILNR_LOGGFIL, "FEL=" ; ERR GOTO PROGRAMSLUT SLUTSEKVENS: '=========== ' AVSLUTNING: IF AVBRYT > 0 THEN PRINT #FILNR_LOGGFIL, "KÖRNING AVBRUTEN MED <ESC>" CLOSE #FILNR_LOGGFIL LOCATE 19, 1 STARTA_KONVERTERING_TILL_TEXTFIL: UTFIL_NAMN_FORLED = EXTRACT$(UTFIL_NAMN, ".HTM" ) KOMRAD = "HTMLTOTXT " + UTFIL_NAMN + " " + URL_SAJT_AKTUELL + ".txt" PID = SHELL(KOMRAD) PROGRAMSLUT: END FUNCTION '***************************************************************** ' * ' F U N K T I O N E R * ' * '***************************************************************** FUNCTION SKRIV_TAL(TAL AS LONG, RADNR AS LONG, KOLNR AS LONG) AS LONG '========================================================== ' DIM ANTAL_TEXT AS LOCAL STRING ANTAL_TEXT = SPACE$(9) RSET ANTAL_TEXT = FORMAT$(TAL, "#,###,##0" ) REPLACE "," WITH "." IN ANTAL_TEXT LOCATE RADNR, KOLNR PRINT ANTAL_TEXT; END FUNCTION |
Svara