Forum » Programiranje » Skripta za Bolho.
Skripta za Bolho.
111111111111 ::
Ima kdo kakšno rešitev, da bi spremljla bolho za male oglase in iskala določene besede v novih oglasih?
Npr. da me opozori ko pride nov oglas, ki vsebuje besedo LEGO.
Hvala že v naprej.
Npr. da me opozori ko pride nov oglas, ki vsebuje besedo LEGO.
Hvala že v naprej.
Cr00k ::
111111111111 je izjavil:
Ima kdo kakšno rešitev, da bi spremljla bolho za male oglase in iskala določene besede v novih oglasih?
Npr. da me opozori ko pride nov oglas, ki vsebuje besedo LEGO.
Hvala že v naprej.
Mogoče lahko uporabiš Google Alert? Sicer pa res kakšnega custom crawlerja naštimat.
AnotherMe ::
In kako bi se lotil izdelat takega crawlerja?
Js recimo kupujem avto, sem izbirčen kakega bi imel, mudi se mi pa ne - in bi mi pasalo imet neko skriptico, ki bi recimo vsako uro pogledala, če je kaj primernega na avtonetu in mi poslala email...
Js recimo kupujem avto, sem izbirčen kakega bi imel, mudi se mi pa ne - in bi mi pasalo imet neko skriptico, ki bi recimo vsako uro pogledala, če je kaj primernega na avtonetu in mi poslala email...
pixelzgaming ::
v pythonu si lahko v par vrsticah napišeš skripto ki ti na xy minut preveri če je prišlo kaj novega. Načinov kako se to naredi je miljon. poglej si kak BeautifulSoup tutorial, notification si lahko pošlješ v obliki maila recimo.
PC: Ryzen 7 3700X | 32GB DDR4 | 500GB NVMe | 10TB HDD | RX 6800 XT | W10
Server: i5 6500 | 32GB DDR4 | 256GB SSD | 50TB HDD | Proxmox VE
Telefon: Samsung S23 Ultra | iPhone 16 Pro Avto: Megane MK4 GTLine
Server: i5 6500 | 32GB DDR4 | 256GB SSD | 50TB HDD | Proxmox VE
Telefon: Samsung S23 Ultra | iPhone 16 Pro Avto: Megane MK4 GTLine
kow ::
BladE_ ::
Je bilo v tej temi že govora o tem. Pisal sem tudi avtorju skripte za kaj več ampak ni bilo odgovra in sem pozabil na to...
Mogoče pa je tale distill.io(@kow, hvala!) boljša rešitev... Uporablja še kdo?
Mogoče pa je tale distill.io(@kow, hvala!) boljša rešitev... Uporablja še kdo?
Akcija - Reakcija
HotBurek ::
Za tiste, ki imate interes za lasten razvoj, učenje...
En sample v Python-u, za avto.net, iz katerega se da naprej gradit. Al pa kot motivacijo, da narediš čisto nov bot.
En sample v Python-u, za avto.net, iz katerega se da naprej gradit. Al pa kot motivacijo, da narediš čisto nov bot.
#!/usr/bin/python3.7 # import import time; import datetime; import traceback; import requests.packages.urllib3; # avoid InsecureRequestWarning requests.packages.urllib3.disable_warnings(); # define headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0"}; timeout = 4; # avto.net url url = "https://www.avto.net/Ads/results_100.asp?oglasrubrika=1&prodajalec=2"; # current ads currentads = []; # class car ad class carad: id = ""; date = ""; time = ""; desc = ""; price = ""; # functions def getdate(): dtstart = datetime.datetime.now(); day = dtstart.day; if len(str(day)) == 1: day = "0" + str(day); month = str(dtstart.month); if len(str(month)) == 1: month = "0" + str(month); _date = str(dtstart.year) + "-" + str(month) + "-" + str(day); return _date; def gettime(): dtstart = datetime.datetime.now(); second = dtstart.second; if second < 10: second = "0" + str(second); minute = dtstart.minute; if minute < 10: minute = "0" + str(minute); hour = dtstart.hour; if hour < 10: hour = "0" + str(hour); _time = str(hour) + "-" + str(minute) + "-" + str(second); return _time; # main entry if __name__ == "__main__": print("[" + getdate() + " " + gettime() + "] " + "Start"); while (True): try: request = requests.get(url, headers=headers, allow_redirects=True, verify=False, timeout=timeout); request.encoding = "windows-1250"; if request.status_code == 200: response = request.text; while (response.find("../Ads/details.asp?id=") > -1): response = response[response.find("../Ads/details.asp?id=") + len("../Ads/details.asp?id="):]; addId = ""; description = ""; price = ""; if response.find("\"") < 9: addId = response[:response.find("\"")]; response = response[response.find("\""):]; if response.find("alt=\"") > 0: description = response[response.find("alt=\"") + len("alt=\""):]; if description.find("\"") > 0: description = description[:description.find("\"")]; if response.find("ResultsAdPriceRegular\">") > 0: price = response[response.find("ResultsAdPriceRegular\">") + len("ResultsAdPriceRegular\">"):]; if price.find("<") > 0: price = price[:price.find("<")]; if len(addId) == 8: isNew = True; for item in currentads: if item.id == addId: isNew = False; break; if isNew: cad = carad(); cad.id = str(addId); cad.date = getdate(); cad.time = gettime(); cad.desc = description; cad.price = price; currentads.extend([cad]); print("[" + getdate() + " " + gettime() + "] https://www.avto.net/Ads/details.asp?id=" + str(addId) + " | " + price + " | " + description); else: print("[" + getdate() + " " + gettime() + "] " + "Response code: " + str(request.status_code)); print("[" + getdate() + " " + gettime() + "] " + "Sleeping for 40 seconds .", end =" "); time.sleep(5); print("35 .", end =" "); time.sleep(5); print("30 .", end =" "); time.sleep(5); print("25 .", end =" "); time.sleep(5); print("20 .", end =" "); time.sleep(5); print("15 .", end =" "); time.sleep(5); print("10 .", end =" "); time.sleep(5); print("5 ."); time.sleep(5); except KeyboardInterrupt: print("[" + getdate() + " " + gettime() + "] " + "Stop"); break;
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
xardas ::
BeautifulSoup, lxml, Portia, VisualPing...nekaj ti bo že ustrezalo ;)
Zgodovina sprememb…
- spremenilo: xardas ()
111111111111 ::
Google alert na bolhi pobira samo oglase za prodajo domačih živali. :D Kupi kdo zajkljo?
Moram poskusiti katerega od drugih.
Moram poskusiti katerega od drugih.
i33a ::
Kako bi se pa lotili zasnove baze za nek tak bot?
Bi hranili vse oglase za določen filter? Ali le datum zadnje objave? Ter potem na podlagi datuma objave pošiljali nova obvestila?
Bi hranili vse oglase za določen filter? Ali le datum zadnje objave? Ter potem na podlagi datuma objave pošiljali nova obvestila?
MisterR ::
Jaz imam skripto (python) za nepremičnine.net in bolha.com , če kdo rabi lahko delim.
Če pa mislite, da bi lahko skupaj izboljšali skripto, pa lahko dam git repo kot public?
@i33a jaz shranjujem v txt file prejšnega ki ga je našel, tako da imam kasneje za primerjavo (skripta se zažene vsakih 30min med 6:00 in 22:00)
Če pa mislite, da bi lahko skupaj izboljšali skripto, pa lahko dam git repo kot public?
@i33a jaz shranjujem v txt file prejšnega ki ga je našel, tako da imam kasneje za primerjavo (skripta se zažene vsakih 30min med 6:00 in 22:00)
111111111111 ::
Mene bi precej zanimala, github mi ne pomaga, ker sem v pythonu bolj švoh. Nazadnje programiral leta 2010. :) Mater leti čas.
extr3m3 ::
111111111111 je izjavil:
Mene bi precej zanimala, github mi ne pomaga, ker sem v pythonu bolj švoh. Nazadnje programiral leta 2010. :) Mater leti čas.
+1
o_O
BigBoss ::
Jaz sem na zadnje programiral (bolj resno, bash skripte in autoit ne štejejo) nekje 20 let nazaj.
Bi pa tisto za nepremicnine potreboval ...
tnx, če jo deliš.
Bi pa tisto za nepremicnine potreboval ...
tnx, če jo deliš.
Zgodovina sprememb…
- spremenil: BigBoss ()
Spura ::
111111111111 je izjavil:
Ima kdo kakšno rešitev, da bi spremljla bolho za male oglase in iskala določene besede v novih oglasih?
Npr. da me opozori ko pride nov oglas, ki vsebuje besedo LEGO.
Hvala že v naprej.
Kako naj te opozori.
MisterR ::
Primer filtrov (greš na bolha.com , na klikaš filtre vse kar je za www.bolha.com skopiraš v bolha_apartments_params)
cron pa si pač vsak sam nastavi
parse.py
config.py
cron pa si pač vsak sam nastavi
parse.py
# -*- coding: utf-8 -*- import bs4, requests, smtplib, config # Download page bolha_host = 'http://www.bolha.com' #no backslash bolha_apartments_params = '/nepremicnine/stanovanja/?reType=4-sobno%7C%7C5+in+večsobno%7C%7C4.5-sobno&viewType=30&location=Podravska%2FMaribor%2FCenter%2F%7C%7CPodravska%2FMaribor%2FKoroška+vrata%2F%7C%7CPodravska%2FMaribor%2FOstalo%2F%7C%7CPodravska%2FMaribor%2FTabor%2F%7C%7CPodravska%2FMaribor%2FKamnica%2F%7C%7CPodravska%2FMaribor%2FKošaki%2F%7C%7CPodravska%2FMaribor%2FStudenci%2F%7C%7CPodravska%2FMaribor%2FTezno%2F&adTypeH=00_Prodam%2F&sort=0' # we will store only new ones so they will be sent in email new_real_estates = [] def send_email(): if len(new_real_estates) > 0: email_subject = "Subject: Novi oglasi" email_body = 'Oglej si na \n' + "\n".join(new_real_estates) else: email_subject = "Subject: Ni novih oglasov" email_body = 'Ni novih oglasov' conn = smtplib.SMTP(config.email_smtp, config.email_smtp_port) # smtp address and port conn.ehlo() # call this to start the connection conn.starttls() # starts tls encryption. When we send our password it will be encrypted. conn.login(config.email_username, config.email_password) header = 'To:' + config.email_to + '\n' + 'From: ' + config.email_from + '\n' + email_subject + ' \n' msg = header + '\n ' + email_body + ' \n\n' if config.send_email_when_no_results == 1: conn.sendmail(config.email_from, config.email_to, msg.encode('utf-8')) conn.quit() def get_bolha_apartments_ads(): get_bolha_apartments_page = requests.get(bolha_host + bolha_apartments_params) get_bolha_apartments_page.raise_for_status() # if error it will stop the program # Parse text for real estates bolha_apartments_page = bs4.BeautifulSoup(get_bolha_apartments_page.text, 'html.parser') for apartments in bolha_apartments_page.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['ad'], limit=2)[1:]: for link in apartments.find_all('h3'): href = link.find('a')['href'] file_apartments = open('bolhaapartments.txt', 'a+') file_apartments .seek(0) text = file_apartments .readline().rstrip() if text != href: file_apartments .truncate(0) file_apartments .write(href) tt = bolha_host + href new_real_estates.append(tt) file_houses.close() get_bolha_apartments_ads() send_email()
config.py
email_from = 'xxx@xxx.xxx' email_to = 'xxx@xxx.xxx' email_smtp = 'mail.xxx.xxx' email_smtp_port = 587 email_username = '' email_password = '' send_email_when_no_results = 1
Zgodovina sprememb…
- spremenil: MisterR ()
Spura ::
Jst sm tut naredu skripto, sicer v Clojure, ki je hostana na githubu.
Lahko si zdownloadas kar pakiran Jar in pozenes z javo:
Jar je tukaj: https://github.com/RokLenarcic/bolha/re...
Lahko pa pozenes s clj komando:
Instalacija za clj https://www.clojure.org/guides/getting_...
Potem pozenes z
in dodas opcije na koncu, brez opcij ti bo izpisalo mozne opcije.
Example opcij:
Lahko si zdownloadas kar pakiran Jar in pozenes z javo:
java -jar bolha.jarplus opcije.
Jar je tukaj: https://github.com/RokLenarcic/bolha/re...
Lahko pa pozenes s clj komando:
Instalacija za clj https://www.clojure.org/guides/getting_...
Potem pozenes z
clj -Sdeps '{:deps {bolha {:git/url "https://github.com/RokLenarcic/bolha.git" :sha "6bd10d8607a0de3e5dde077a7a79199ee12ed5e1"}}}' -m bolha
in dodas opcije na koncu, brez opcij ti bo izpisalo mozne opcije.
Example opcij:
--host smtp.gmail.com --mail 'rok.lenarcic@gmail.com' --user rok.lenarcic --pass password --port 587 --tls --query lego
Zgodovina sprememb…
- spremenil: Spura ()
Spura ::
V kaksnem smislu za mobitel? A da bi ti mobitel to skos skeniral? Ti bo vso baterijo skurilo. Poleg tega pa tele skripte itak posiljajo email za katerega predvidevam da dobis obvestilo na telefonu.
i33a ::
Pozdravljeni, sem pred časom videl temo in sem spisal eno skrpto, ki obiskuje določen URL na avto.net vsake npr. 15 min.
Po nekaj iteracijah vedno dobim napako:
Torej Avto.net ne pusti več takih zahtev in s tem nekako preprečuje DOS napad. Mi je pa zanimivo, ker se to pojavi, tudi ko je ena zahteva na 15 min, kar se mi ne zdi ravno pogosto.
Obstaja kakšen način kako to zaobiti in na recimo 15-30min pridobivati podatke?
Po nekaj iteracijah vedno dobim napako:
Max retries exceeded with url:.
Torej Avto.net ne pusti več takih zahtev in s tem nekako preprečuje DOS napad. Mi je pa zanimivo, ker se to pojavi, tudi ko je ena zahteva na 15 min, kar se mi ne zdi ravno pogosto.
Obstaja kakšen način kako to zaobiti in na recimo 15-30min pridobivati podatke?
XLapsus ::
Rabim en request (v bistvu dva, ker preverjam dve strani) na 5min. Uporabljen kar PHP
file_get_contents(url)
planina91 ::
Google Alert
https://www.google.com/alerts?hl=sl#
Primer pri meni za iskanje:
GTX site:bolha.com/nvidia-graficne-kartice
Traja pa malenkost dlje, da google poindeksira bolho.
https://www.google.com/alerts?hl=sl#
Primer pri meni za iskanje:
GTX site:bolha.com/nvidia-graficne-kartice
Traja pa malenkost dlje, da google poindeksira bolho.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Postavitev mySQLOddelek: Programiranje | 2261 (1839) | M01O |
» | [Python3] Izvajanje ukazov po določenem časuOddelek: Programiranje | 1476 (1086) | noraguta |
» | Fake traffic generatorOddelek: Omrežja in internet | 2293 (1489) | HotBurek |
» | [C#] Simobilov GlasnikOddelek: Programiranje | 4365 (1445) | Mrch |
» | asp-problem z datumomOddelek: Izdelava spletišč | 1385 (1249) | Old-Death |