Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - GloGlo

Stran: 1 2 [3] 4
31
Odkladiště / Re:Pořízení anonymní domény
« kdy: 13. 07. 2022, 18:34:08 »
No, ve spojení s tvýma ostatníma příspěvkama (vysávání obsahu cizí stránky přes websocket, ukládání hromady JSONů do DB) to úplně křišťálově čistě nepůsobí :-)

Na ty websockety jsem se už vykašlal, ty JSONy jsou mnohem lepší :) Jinak ale stahování dat z internetu, pokud ten samotnej obsah není nelegální (dětské porno atd) popř. z nějakýho důvodu chráněnej (např. emaily), je to pro osobní potřebu, nedochází při tom k prolomení nějakýho zabezpečení (hacking atd) a nezpůsobuje se tím někomu škoda/újma, tak je naprosto legální a to i ve velkém množství :)

32
Odkladiště / Re:Pořízení anonymní domény
« kdy: 13. 07. 2022, 01:14:29 »
Ani nemusí být potřeba chtít publikovat něco v rozporu s něčím. Můžete mít doménu pro cokoliv, třeba nějaký OSS projekt, a prostě nemáte potřebu troubit do světa kdo jste, kde bydlíte a jaké máte telefonní číslo.

V registru CZ.NICu mám uvedeno pouze jméno a ostatní osobní údaje jsou neveřejné (mám ověřený kontakt). Já mám zkušenost, že smyšlené nebo anonymní údaje jsou u domén, se kterými je spjat nějaký ten bordel (spam, scam, ...). :-)

// edit: Myšleno, že ve veřejné DB (whois) mám jen jméno a vše ostatní je neveřejné. V registru mám samozřejmě úplná osobní data.

Když se někdo jmenuje Jan Novák, tak je celkem v pohodě. Ale pak jsou lidé s unikátními jmény jako třeba Záboj Horák, kde se toho o někom dá dost zjistit prostě jen ze jména.

Jinak nechci anonymní doménu kvůli něčemu nelegálnímu, prostě chci soukromí (a moje jméno je podobně unikátní jako ten Záboj Horák, prostě se dá snadno vygooglovat).

33
Odkladiště / Pořízení anonymní domény
« kdy: 12. 07. 2022, 14:51:11 »
Zdravím. Máte někdo zkušenost s tím, jak si pořídit doménu, aby nebylo z žádného záznamu vidět, kdo ji vlastní? Prostě aby byla anonymní? Je mi jasný, že správce domény asi vlastníka vždycky uvidí a že třeba .cz doména takhle pořídit nejde, ale tipuju, že třeba .com by jít mohla? Popř. nějaké jiné?

34
Mám velké množství dat (cca 10 GB) ve formátu JSON, asi 2 miliony souborů. Je tam hodně různých parametrů/keys, asi 100, a hlavně vícestupňová soustava (některý parametr obsahuje dict a ten zase dict a ten zase dict atd).

V ideálním případě bych to chtěl nějak narvat do jedné databáze, kde by každý ten dict byl samostatná tabulka a bylo to navzájem propojené přes foreign_keys. Ale už i jen samotné vytvoření struktury databáze bude piplačka metodou pokus omyl a nehledě pak na ten import.

Asi jsem hodně naivní/línej, ale je nějaký nástroj, který by mi tu strukturu databáze vytvořil automaticky a byl schopný i provést import? :-) Samozřejmě by mi to extrémně moc usnadnilo práci :D

Databáze ideálně SQL, resp. aby s ní šlo pracovat přes SQLAlchemy.

35
Jinak o právu toho vím víc než o IT a pořizování dat pro osobní potřebu je výslovně dovoleno.

Vy ale netahate data (staticka data), ale pouzivate neci sluzbu / informacni system:
http://zakony.centrum.cz/trestni-zakonik/cast-2-hlava-5-paragraf-230

Ale klidne prokazte, ze mate s provozovatelem smlouvu, a opravneni jeho systemu vyuzivate, stylem, ktery delate.
Jinak o právu toho vím víc než o IT a pořizování dat pro osobní potřebu je výslovně dovoleno.

Vy ale netahate data (staticka data), ale pouzivate neci sluzbu / informacni system:
http://zakony.centrum.cz/trestni-zakonik/cast-2-hlava-5-paragraf-230

Ale klidne prokazte, ze mate s provozovatelem smlouvu, a opravneni jeho systemu vyuzivate, stylem, ktery delate.

Tak zaprvé, subsidiarita trestní represe. Trestní právo tu není od toho, aby postihovalo každé protiprávní jednání, ale jen jednání, které je závažné a ve zvýšené míře ohrožuje fungování společnosti. Příklad: neoprávněné osvojení si cizí věci je krádež, ale aby se stala trestným činem, musí mít věc hodnotu nejméně 10 tisíc korun (z tohoto pravidla jsou určité výjimky, ale to tu nemá smysl řešit). Každopádně pokud dojde ke krádeži věci nižší hodnoty, tak to trestný čin není a trestní právo se tím vůbec nezabývá. (Zabývalo by se tím správní právo a řešilo by se to podle přestupkového zákona.) Zjednodušeně řečeno tímto zákonodárce vyjadřuje, že společnost ohrožují hlavně "velké" krádeže a ty malé ji ohrožují ve zmenšené míře, čemuž potom odpovídá méně formalizovaný proces a nižší sankce.

Konkrétně k tomu odkazovanému § 230 trestního zákoníku: ten vymezuje tzv. počítačovou resp. kybernetickou kriminalitu. Skutková podstata dle odst. 1 je hlavně tzv. hacking - získání neoprávněnýho přístupu do nějakýho "počítačovýho systému nebo jeho části", přičemž "počítačový systém" je nějaký zařízení, který je schopný zpracovávat data, tzn. je to kombinace hardware + software. No a hlavně základní podmínka trestnosti je, že pachatel překonal nějaký bezpečnostní opatření, tzn. musí tam nějaký být (pokud není, tak to nemůže být trestný čin dle tohoto paragrafu), typicky se tohoto TČ dopouští pachatel, který vnikl do nějakýho systému poté, co uhádl jednoduché heslo nebo ho prolomil a nebo se tam dostal nějak sofistikovaněji - přes nějakej spoofing, exploit atd.

Odstavec 2 je trochu jinej, jeho předmět je vedle "počítačového systému" též "nosič dat", čímž se myslí medium, na který lze zapisovat data a později je přečíst zpět, tzn. např. pevný disk, RAM, CD/DVD, USB flashka apod. Každopádně nosičem dat nejsou nějaký konkrétní data, bez ohledu na to, jestli jsou nebo nejsou nějak chráněný/zašifrovaný atd. 

Trestnýho činu dle odst. 2 se dopustí pachatel, který 1) ZÍSKÁ PŘÍSTUP k tomu "počítačovému systému" nebo "nosiči dat" - nehledě na to, jestli ten přístup je oprávněnej nebo neoprávněnej - každopádně "získání přístupu" znamená, že pachatel má možnost s tím "počítačovým systémem" nějak disponovat, tzn. má možnost tam třeba spouštět programy, prohlížet soubory na disku atd a když teda má přístup tak 2) PROVEDE NĚKTERÝ ZE SKUTKŮ dle bodů a-d. Nicméně můj rozbor tohoto trestného činu zde končí, protože - jak je doufám zřejmé - nehledě na to, co s těma datama dělám, prostě u websocket connection nemám jakejkoli přístup do "počítačového systému" odesilatele, takže je prostě nemožné se dopustit tohoto trestného činu.

Pozn: jedinej trestnej čin, který mě v této souvislosti napadá, by bylo "odposlouchávání" NEVEŘEJNÝ, tzn. nějaký soukromý websocket connection - pak by to mohl být TČ porušení tajemství dopravovaných zpráv dle § 182 odst. 1 písm c) TZ

36
To všechno jsou ale standardní věci WebSocket protokolu. Když chcete nějaký protokol používat, budete si muset nastudovat, jak funguje. Nemůžete čekat, že vám někdo bude vysvětlovat, jak přesně ten protokol funguje a jak ho používat, abyste mohl (nejspíš nelegálně) získávat nějaká data.

Takže každý člověk by si měl před prvním připojením na internet nastudovat, jak funguje HTTP protokol? :-)

Jinak o právu toho vím víc než o IT a pořizování dat pro osobní potřebu je výslovně dovoleno.

Citace

§ 91
Omezení zvláštního práva pořizovatele databáze
Do práva pořizovatele databáze, která byla zpřístupněna jakýmkoli způsobem veřejnosti, nezasahuje oprávněný uživatel, který vytěžuje nebo zužitkovává kvalitativně nebo kvantitativně nepodstatné části obsahu databáze nebo její části, a to k jakémukoli účelu, za podmínky, že tento uživatel databázi užívá běžně a přiměřeně, nikoli systematicky či opakovaně, a bez újmy oprávněných zájmů pořizovatele databáze, a že nezpůsobuje újmu autorovi ani nositeli práv souvisejících s právem autorským k dílům nebo jiným předmětům ochrany obsaženým v databázi.

§92

Bezúplatné zákonné licence
Do práva pořizovatele jím zpřístupněné databáze též nezasahuje oprávněný uživatel, který vytěžuje nebo zužitkovává podstatnou část obsahu databáze

a) pro svou osobní potřebu; ustanovení § 30 odst. 3 zůstává nedotčeno,

b) pro účely vědecké nebo vyučovací, uvede-li pramen, v rozsahu odůvodněném sledovaným nevýdělečným účelem, a

c) pro účely veřejné bezpečnosti nebo správního či soudního řízení.


37
Handshake je ta z toho send.
Handshake jsou ty HTTP hlavičky, kterými se obě strany dohodnou o přechodu na WebSocket. Až potom nad tím websocketem je samozřejmě nějaký aplikační protokol, který taky potřebuješ dodržet. Ten řešíš v send.

Nevím. Rozhodně si nechci hrát na experta. Zkoušel sem tři weby s live scores. Jeden začne posílat data hned, stačí mu poslat hlavičku. Jenže ty data posílá nějak zazipovaný a zakódovaný, zatím sem nepřišel na to, jak to odkodovat. U dalších dvou bylo nutný poslat ještě několik dalších příkazů (nebo jak se tomu říká), aby se ty streamy rozjely, a taky chtěji v určitých intervalech posílat ping, jinak se ten stream zastaví.

38
Je, už sem na to přišel, ono to bylo snadný. Ty messages jsou sent a received. Handshake je ta z toho send. když ji zkopíruju a vložím do toho ws.send, tak to funguje.

39
Viz třeba tenhle článeček:
https://towardsdatascience.com/websocket-retrieve-live-data-f539b1d9db1e

Zkopíroval sem si ten skript z toho článku, změnil headers a url podle těch z prohlížeče, ale když to spustím, tak se to zasekne na tom # Perform the handshake.

Když udělám jen create_connection, tak mi to prostě neposílá vůbec nic. A když tam pošlu přes to ws.send nějaký náhodný "blablabla", tak to tu connection ihned ukončí.


40
Snažím se scrapovat jeden web a zjistil sem, že data, který potřebuju, do prohlížeče proudí přes websocket connection. V Chrome dev tools (Network -> WS) tu WS vidím, jsou tam headers i obsah těch proudících dat (v mém případě zazipovaný, ale to je teď vedlejší). Ale abych tu websocket connection byl schopnej navázat i mimo browser a mohl se vykašlat na spouštění prohlížeče, což je hrozně pomalý a žere to moc CPU, tak nějak potřebuju tý druhý straně poslat hand-shake a ten v těch dev tools prostě nevidím. Je nějakej způsob, jak zjistit, jakej hand-shake prohlížeč posílá?

41
Jo, jinak v tom mém kodu mělo být
Kód: [Vybrat]
await asyncio.sleep(1)
a ne jen
Citace
asyncio.sleep(1)
, ale na to sem přišel rychle, protože mi to dávalo warning.

42
Tak tu máme v tom evidentne poriadny hokej.

Táto slučka vyzerá na prvý pohľad ako problém:

Kód: [Vybrat]
while True:
content = await page.content()
soup = BeautifulSoup(content, 'html.parser')
data = await parse(data, soup, sport)
asyncio.sleep(1)

Vytvárať vlastné slučky pomocou while True je big, big no.
Asynchrónne programovanie je založené na slučke udalostí, ktorú však vytvorí
asyncio modul.

Citace
asyncio.run function runs the passed coroutine, taking care of managing the
asyncio event loop and finalizing asynchronous generators.

Takmer určite tvoj problém nespôsobil Puppeteer, ale chyba v tvojom programe.

Mne prijde, že sa snažíš vytvoriť pravdepodobne nejaký monitorovací skript.
Ak je to tak, tak si najpr treba vytvoriť skript, ktorý vykoná požadovaný task
a až potom neskôr riešiť monitoring.

Add puppeteer. Headless browser použiješ vtedy, ak sa potrebuješ dostať
za JS bránu, napr. za prihlasovacie okno. Pre ostatné prípady sa bežne
používajú http clienty. Python má httpx, ktorý zvládne aj async programy.

Kód: [Vybrat]
#!/usr/bin/python

import httpx
import asyncio
from bs4 import BeautifulSoup

async def get_async(url):
    async with httpx.AsyncClient() as client:
        return await client.get(url)

urls = ['http://webcode.me', 'https://httpbin.org',
    'https://something.com', 'https://stackoverflow.com',
    'https://github.com']

async def launch():
    resps = await asyncio.gather(*map(get_async, urls))
    data = [resp.text for resp in resps]

    for content in data:
       soup = BeautifulSoup(content, 'lxml')
       print(soup.title)

asyncio.run(launch())

Príklad asynchrónne stiahne HTML kód z viacerých stránok, a výpíše ich
titulky.

Čo je ale vlastne tvoja požiadavka, o čo sa snažíš? Pojem webscrawling
neexistuje, máme web scraping a web crawling. Web scraping je sťahovanie dát
z internetu, trebárs ceny leteniek k danému dňu. Web crawling je to, čo robí
Google.

OK. Web scraping. Web s datama, který se v prohlížeči aktualizujou skoro každou sekundu nějak pomocí Ajaxu/JS. Kdybych stáhnul stránku pomocí wget/curl, tak je to nepoužitelná statická stránka bez těch dat. Takže potřebuju mít spuštěnej prohlížeč, který předává zdroják parsovacímu skriptu, který ho projede, podívá se na změny od posledního checku a pokud nějaký jsou, tak to uloží do databáze.

Data v budoucnu chci zpracovávat pomocí AI. (Až se to líp naučím)

43
Ten kod se zasekne tak jako tak, na te nekonecne smycce.

volani asyncio.sleep bez await na nic neceka.

tezko rict proc to ze serveru nejde, muze souviset s blacklistovanymi serverovymi IP adresami.

Pokud jsi je zahltil requesty generovanymi tou nekonecnou smyckou bez cekani, je dobra sance, ze te zablokovali.

Ten tazatel na GH to spousti z nejake CI sluzby, tam je take dost velka sance blokace.

Ne, chyba nebyla v tom, že by nebyl dostupný nějaký určitý web, ale nešlo mi vůbec v pyppeteeru otevřít nový tab. Zaseklo se to už na await browser.newPage(). Nicméně nakonec sem vyřešil pomocí minimal args:

Kód: [Vybrat]
minimal_args = [
'--autoplay-policy=user-gesture-required',
'--disable-background-networking',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows',
'--disable-breakpad',
'--disable-client-side-phishing-detection',
'--disable-component-update',
'--disable-default-apps',
'--disable-dev-shm-usage',
'--disable-domain-reliability',
'--disable-features=AudioServiceOutOfProcess',
'--disable-hang-monitor',
'--disable-ipc-flooding-protection',
'--disable-notifications',
'--disable-offer-store-unmasked-wallet-cards',
'--disable-popup-blocking',
'--disable-print-preview',
'--disable-prompt-on-repost',
'--disable-renderer-backgrounding',
'--disable-setuid-sandbox',
'--disable-speech-api',
'--disable-sync',
'--hide-scrollbars',
'--ignore-gpu-blacklist',
'--metrics-recording-only',
'--mute-audio',
'--no-default-browser-check',
'--no-first-run',
'--no-pings',
'--no-sandbox',
'--no-zygote',
'--password-store=basic',
'--use-gl=swiftshader',
'--use-mock-keychain',
'--allow-insecure-localhost',
];

teď mi to na serveru funguje.

Ale teda musím říct, že moje představy, že to takhle bude rychlejší, se absolutně, absolutně vůbec nenaplnily.

Doteď sem používal selenium, jeden tab a prostě rychle za sebou otevíral, checkoval, zavíral stránky.. Ale otevřenej byl vždycky jen jeden tab. Program top mi ukazoval více spuštěnejch procesů chrome, jak kdy, zhruba 5-7 jich bylo, a load average kolísal kolem 3-6.

Jenže teďka, když teda používám ten pyppeteer, jeden spuštěnej browser a 7 otevřenejch tabů, jejichž zdroják checkuju... Spuštěnejch procesů chrome je nějak o dost víc, asi 15-20, a load average je zhruba 3x vyšší.. resp. kolísá cca mezi 10-20.. ale chvilku byl i 50, lol..

44
hm k tomu výše.. vypadá to na bug v Pyppeteeru :///

https://github.com/pyppeteer/pyppeteer/issues/395

Tímto se pro mě bohužel pyppeteer stává nepoužitelným

45
A.P.Hacker:

Předělal sem teda svůj parsovací skript, aby místo selenium používal pyppeteer. Na notebooku mi to funguje dobře.. jenže když ten stejnej kod nahraju na VPS a pokouším se ho spustit, tak se to prostě zasekne u vytvoření stránky

Kód: [Vybrat]
page = await browser.newPage()

... a pak to prostě čeká a nic nedělá.. dokud to nevypnu... Absolutně nechápu proč. Pyppeteer mám samozřejmě nainstalovanej a taky mám stáhlý chrome přes pyppeteer-install.

Celej kod:

Kód: [Vybrat]
import asyncio
from pyppeteer import launch
import datetime
from bs4 import BeautifulSoup
from DB import *

sports = {}
sports['soccer'] = 'https://www.somewebsite.com'
sports['tennis'] = 'https://www.somewebsite.com'

async def AddToDB(data):
# saves any changes to DB
pass

async def parse(data, soup, sport):
# does something
return data

async def CheckPage(browser, sport):
data = {}
url = sports[sport]
page = await browser.newPage()
        print (page) # nikdy se nevytiskne
await page.goto(url)

while True:
content = await page.content()
soup = BeautifulSoup(content, 'html.parser')
data = await parse(data, soup, sport)
asyncio.sleep(1)

async def main():
print ("Started: " + datetime.datetime.now().strftime('%H:%M:%S'))
browser = await launch ({ "headless": True, "args": ["--start-maximized"]})

return await asyncio.gather(
       *[asyncio.create_task(CheckPage(browser, sport)) for sport in sports]
)


asyncio.run (main())


Nějakej nápad?

Stran: 1 2 [3] 4