Jump to content

[C++] check url validation


slamjaw
 Share

Recommended Posts

Labdien!

 

Lieta tāda, ka gribu uzrakstīt programmu, kas pārbauda interneta adreses diapazonā piemēram no 1 līdz 100000, un atver, vai saglabā tikai tās lapas, kuras ir ejošas.

 

Lapa izskatās aptuveni tā - http://www.kautkas.lb/index_1.php?logo_small.gif

 

 

 

vieninieka vietā ievietot skaitli no 2 - 100000 un pārbaudīt vai saite ir ejoša. Ejošās lapam vai nu tiek atvērtas uz IExplorer vai tiek saglabātas piemēram log.txt failā.

 

 

 

Vai kāds ir rakstījis kautko līdzīgu? Kāds var man ieteikt kautko noderīgu? 

 

Paldies!

Link to comment
Share on other sites

Draudziņu bildes vajag savilkt? :)

 

Bet kāpēc tam vajag C++? Daudz ērtāk izmantot kādu skriptu valodu, piemēram Python:

from urllib import urlopen

for x in xrange(2, 100000+1):
 print x
 try:
with urlopen("http://www.kautkas.lb/index_%s.php?logo_small.gif" % x) as url:
  data = url.read()
  with open("output_%s.gif" % x, "wb") as f:
	f.write(data)
 except:
pass

Labots - bubu
Link to comment
Share on other sites

slamjaw
Tev tas obligāti C++ valodā jāraksta?

 

Nu nav obligāti. Man galvenais vajag ejošos linkus atrast. Tā kā es skolā mācos c++, tāpēc arī nolēmu to darīt ar šo valodu ... runājot par "Python" skriptu, neesmu nekad ar to sastapies... Kā to skriptu kompilēt?

Link to comment
Share on other sites

Pitona skriptus nevajag kompilēt. Uzinstalē python'u, atver komandrindu, un tur ieraksti python.exe skripts.py. Un viss notiksies.

Protmas, to var darīt arī no kādas IDE's (defaultā pitonam nāk līdzi IDLE).

Link to comment
Share on other sites

BoredOne

Protams, vēl nedaudz pielabojot bubu koda vienu rindiņu var padarīt lietas vēl ērtākas.

with open("c:\\mans_krutais_bilzu_folderis\\output_%s.gif" % x, "wb") as f:

Un ja vēl wx... Labi, labi es te apstāšos. :)

 

Python skripti 'kompilējās', tos palaižot. Ejam uz python.org un velkam jaunāko versiju (2.6 laikam), uzinstalējam, iekopējam bubu tekstu mans_skripts.py teksta failā, saglabājam, aizveram, dubultklikšķis uz faila = win.

 

Edit: Ehh bubu jau paspēja...

Labots - BoredOne
Link to comment
Share on other sites

Nevajag jau uzreiz tā eskeipoties, pietiek ar mazu r burtiņu :)

with open(r"c:\mans_krutais_bilzu_folderis\output_%s.gif" % x, "wb") as f:

Link to comment
Share on other sites

BoredOne

Nu a ja cilvēkam vajag šādu? :)

 

with open(u"c:\glāžšķūņrūķīšu_bildītes\output_%s.gif" % x, "wb") as f:

 

Labi, labi - tā ir tikai piekasīšanās. Man bija garlaicīgi, un te reti runā par pitonu.

Link to comment
Share on other sites

A kur problēma?

with open(ur"c:\glāžšķūņrūķīšu_bildītes\output_%s.gif" % x, "wb") as f:

Link to comment
Share on other sites

slamjaw
Pitona skriptus nevajag kompilēt. Uzinstalē python'u, atver komandrindu, un tur ieraksti python.exe skripts.py. Un viss notiksies.

Protmas, to var darīt arī no kādas IDE's (defaultā pitonam nāk līdzi IDLE).

 

Tas, ka beigās ir .gif vēl neliecina, ka tā ir bilde... lai saprastu, par ko iet runa, te būs īstā adrese. "http://tvali.ge/tv/1_list.php?d=1440&playlistsize=60&logo=images/tvali_logo_small.gif". Tas ir playlist. Daži ir ejošie, daži vispār never, jo tāda lapa nepastāv. (mainīgais ir tas tv/1_list.php). 

 

 

 

 

Atverot Jūsu skriptu, man parāda error syntax error: invalid syntax. Ir kādi ieteikumi? 

Link to comment
Share on other sites

Gadījumā nenovilki 3.0 pitona versiju? Uz to neesmu testējis, tur ir diezgan daudz nesavietojamību, tāpēc pagaidām tādu nelietoju.

Labots - bubu
Link to comment
Share on other sites

slamjaw
Gadījumā nenovilki 3.0 pitona versiju? Uz to neesmu testējis, tur ir diezgan daudz nesavietojamību, tāpēc pagaidām tādu nelietoju.

 

 

Man ir versija 3.1

Link to comment
Share on other sites

3.1 taču vēl ir alpha. Kāpēc cilvēkiem patīk lietot nestabilas un negatavas lietas...

Velc 2.6 versiju. Ja nu ļoti gribās to 3.1, tad pamēģini print rindiņu pamainīt uz: print(x). Tā noteikti ir viena no nesavietojamībām, par citām nezinu.

Link to comment
Share on other sites

slamjaw

ar versiju 2.6 man skriptu palaida. Uz melnā loga tiek uzskaitīti skaitļi no 1 līdz ..... neko nesaglabā un neko nerāda... arī man zināmie ejošie linki neuzrādas un nesaglabājas. kas varētu būt pa vainu?

 

Mēģināšu paskaidrot konkrētāk, ko es īsti vēlos panākt. Es no visām šīm 100000 kombinācijām gribu atrast visas adreses, kuru atverot neuzrādas „404 NOT FOUND". Piemēram atverot šo, atveras lapa ar adresēm, bet šo, tiek paziņots, ka tā lapa nav atrasta (error 404). Tad nu man vajag saglabāt ADRESES tikai tām, kurām ir kautkāds saturs, ja ir error 404, tad viņu vienkārši ignorēt.

 

Ceru ka sapratāt!

Link to comment
Share on other sites

Ok, mana kļūda. Nezināju, ka urlopen nevar lietot ar with. Raksti šādi:

from urllib import urlopen

for x in xrange(2, 100000+1):
 print x
 try:
url = urlopen("http://www.kautkas.lb/index_%s.php?logo_small.gif" % x)
try:
  data = url.read()
  with open("output_%s.html" % x, "wb") as f:
	f.write(data)
finally:
  url.close()
 except:
pass

 

Ja gribi tikai atrast numurus, kuri strādā, bet pašu failu saturs nav vajadzīgs, tad raksti šādi:

from urllib import urlopen

for x in xrange(2, 100000+1):
 ok = True
 try:
try:
  url = urlopen("http://www.kautkas.lb/index_%s.php?logo_small.gif" % x)
finally:
  url.close()
 except:
ok = False
 if ok:
print x

Tas izdrukās tikai tos skaitļus, kuriem tas urlis verās vaļā. Potams, tas gan nestrādās, ja serveris atgriezīs 404 lapu arī "neeksistējošiem" urļiem. Tādā gadījumā nāksies skatīties atgrieztajos datos, vai tie ir "eksistējoši" vai nē.

Labots - bubu
Link to comment
Share on other sites

slamjaw
Ok, mana kļūda. Nezināju, ka urlopen nevar lietot ar with. Raksti šādi:

from urllib import urlopen

for x in xrange(2, 100000+1):
 print x
 try:
url = urlopen("http://www.kautkas.lb/index_%s.php?logo_small.gif" % x)
try:
  data = url.read()
  with open("output_%s.html" % x, "wb") as f:
	f.write(data)
finally:
  url.close()
 except:
pass

 

Ja gribi tikai atrast numurus, kuri strādā, bet pašu failu saturs nav vajadzīgs, tad raksti šādi:

from urllib import urlopen

for x in xrange(2, 100000+1):
 ok = True
 try:
try:
  url = urlopen("http://www.kautkas.lb/index_%s.php?logo_small.gif" % x)
finally:
  url.close()
 except:
ok = False
 if ok:
print x

Tas izdrukās tikai tos skaitļus, kuriem tas urlis verās vaļā. Potams, tas gan nestrādās, ja serveris atgriezīs 404 lapu arī "neeksistējošiem" urļiem. Tādā gadījumā nāksies skatīties atgrieztajos datos, vai tie ir "eksistējoši" vai nē.

 

Radās neliela problēma! tagad, viņš visām adresēm, kurām nav saturu, rāda to 404 not found. Vai ir iespējams uzrakstīt skriptu tā: Ja atvērtās lapas TITLE ir "HTTP 404 Not Found", tad izlaizt ierakstīšanu, pretējā gadijumā parādīt piemēram "Links ir aktīvs"! Būtu ideāli, lai tos skaitļus varētu ierakstīt piemēram log.txt... Bet ja nevar... vienalga esi ļoti palīdzējis!

Link to comment
Share on other sites

Protams, ka var.

 

Un nevajag taisīt milzonīgas QUOTEs. Es savu postu varu izlasīt augstāk, nav tas jāquotē.

 

from urllib import urlopen

with open("log.txt", "w") as outf:
 for x in xrange(2, 100000+1):
try:
  try:
	url = urlopen("http://www.kautkas.lb/index_%s.php?logo_small.gif" % x)
	data = url.read()
	if "HTTP 404 Not Found" not in data:
	  print >>outf, x
  finally:
	url.close()
except:
  pass

Labots - bubu
Link to comment
Share on other sites

slamjaw

Kautkas nav! Tagad skripts nerāda ejošos linkus! Es nomainīju adresi! Nevar tak būt, ka ielaidu šeit kļūdu!

 

from urllib import urlopen</P> <P>with open("log.txt", "w") as outf:
 for x in xrange(1, 100000+1):
try:
  try:
	url = urlopen("<A href="http://tvali.ge/tv/%s_list.php?d=1440&playlistsize=60&logo=images/tvali_logo_small.gif">http://tvali.ge/tv/%s_list.php?d=1440&playlistsize=60&logo=images/tvali_logo_small.gif</A>" % x)
	data = url.read()
	if "HTTP 404 Not Found" not in data:
	  print >>outf, x
  finally:
	url.close()
except:
  pass

Link to comment
Share on other sites

slamjaw

Da nē! uzskata arī ejošos linkus par neejošiem! Piemēram pirmais numurs ir ejošais, bet logos nav viņa!

Link to comment
Share on other sites

Tas jau nozīmē, ka iet, tik nekorekti :)

Un problēma ir tur, ka teici, ka jāmeklē "HTTP 404 Not Found", bet īstenībā neejošās lapas satur tikai "404 Not Found" tekstu.

Link to comment
Share on other sites

slamjaw

Nu es īsti neredzu atšķirību  :D . Es tik nesen sāku mācīties programmēšanu.  :? Tā kā ceru, ka pārāk te neuzbāzos ar "Stulbiem jautājumiem". 

 

 

 

Ir kāda cita iespēja?

Link to comment
Share on other sites

Tak šī pati iespēja der. Tik nomaini to stringu.

Es jau nezināju kas tās tev par lapām - tu man pateici jāmeklē "HTTP 404 Not Found", es tādu kodu tev parādīju. Bet skripts nevienā lapā tādu stringu neatrada, jo tajā tāda nav! Jo vajadzēja meklēt "404 Not Found", kurš gan ir atrodams "neeksistējošos" urļos.

Labots - bubu
Link to comment
Share on other sites

slamjaw

Ja ir laiks, tad apskaties ŠO Lapu ar to 404 kodu. es visus iespējamos "stringus" izmēģināju, bet bez rezultāta.

Link to comment
Share on other sites

Nu tur ir tas "404 Not Found". Es to ieliku kodā un man iet, tb skaitlim 2 neuzrāda šo linku kā derīgu.

Link to comment
Share on other sites

slamjaw

Pamēģini sākt ar skaitli 1 vai 955. Tie noteikti ir ejošie. Man liekas, ka kautkas ar kodu nav kārtībā...

Link to comment
Share on other sites

slamjaw

Izkatās, ka tā varētu arī būt... Tu varētu pilnu savu kodu te ielikt?

Link to comment
Share on other sites

Es visu laiku saku - tas ir tieši tāds kā #17 postā, tik tas HTTP 404 strings nomainīts bez HTTP priekšā.

Link to comment
Share on other sites

slamjaw

Palaidīšu skriptu no sākuma līdz beigām, un tad skatīšos, kas ir kā!!!

 

MILZONĪGS TEV PALDIES!!! Viss ir tieši tā, ka man vajag...   :yahoo:  

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...