Wpis z mikrobloga

#programowanie #csharp #webdev

Napisałem sobie prosty #!$%@? obrazków w C#, który po daniu mu linka do strony ordynarnie #!$%@? z niej wszystkie obrazki o odpowiednich formatach jakie się na niej znajdują ( ͡º ͜ʖ͡º)

Niestety nie działa to zadowalająco, bo AJAXy i inne gówna, jak te elementy skalujące obrazki (te co po najechaniu na obrazek powiększają go). Efekt jest taki, że bez interakcji użytkownika zaoranie HTMLa w poszukiwaniu wszystkiego co ma tag ![]() i podpieprzenie src= zwraca mi jedynie miniatury.

Jak wiadomo w takiej podpieprzajce chodzi nam właśnie głównie o te rozmiary oryginalne a nie miniatury, ale czy da się to w ogóle zrobić bez zasymulowania interakcji użytkownika? JavaScript podmienia nam te obrazki w locie reagując na mouse hover czy klikanie, więc w bazowym linku tych obrazków po prostu nie ma. Da się tutaj jakoś zahaxować czy raczej dupa zbita (przynajmniej jak na moje)?

A z ciekawości pytanie - JS dałby sobie radę z taką wybebeszką?
  • 24
@Decay: No właśnie chciałem zrobić w miarę uniwersalną podpieprzajkę, ale zapomniałem, że teraz wszędzie nasrane JSem i większość rzeczy dzieje się pod wpływem interakcji użytkownika i pierwotny HTML tego nie zawiera.
@Khaine: jeszcze mam taki pomysł: scrapowanie obrazów z google/binga. W wyszukiwarce obrazów wpisujesz site:domena.tld i dostajesz listę obrazów, miniaturki możesz wywalić za pomocą filtrowania rozmiaru obrazów. Możesz też określić zakres dat, z których chcesz obrazki.
Oczywiście musiałbyś pobrać sobie jakiś słownik i do zapytania dołączać słówka żeby otrzymać jak największą liczbę wyników(bo domyślnie chyba są jakieś ograniczenia).

No i jeżeli robiłbyś to bez API to zapytania do google wysyłaj +/- co
@xetrov: Ja się na JSie nie znam, bo bym tego pewnie nawet nie tykał w C# jakbym się znał. Ale tak czuję, że jak coś ma magiczne furtki to raczej JS. W jaki sposób miałoby to działać?

@Decay: Gra niewarta świeczki raczej, szybciej będzie zrobić na stronie prawoklik -> zbadaj. A tu chodziło właśnie o pominięcie kopania w kodzie źródłowym, tylko wdupcenie linka i naciśnięcie przycisku - żeby było szybciej.
@Khaine: jak to? Piszesz automat, binga można scrapować co kilka sekund, google co te 60 sekund, jednorazowo dostajesz chyba kilkadziesiąt obrazów. Chcesz mi powiedzieć, że jesteś w stanie siedzieć 24/7 przed kompem i wyciągać obrazki z kodu? I do tego zrobisz to wydajniej w 60 sekund, niż automat? ( ͡° ͜ʖ ͡°)
@Decay: Niee, zwykle chodzi o wywleczenie 1-5 obrazków z konkretnej strony (ale nie wiadomo jakiej z góry), bo są do czegoś potrzebne. Nie potrzebuję ściągać całego śmietnika ze strony, nawet miałem przygotowane filtrowanie po rozmiarze (niestety nie każdy tag img ma rozmiar w sobie) żeby mi jakichś pypków nie ściągał.
@Khaine: aaa, rozmiar możesz sprawdzać bezpośrednio po pobraniu, zapisz z url do bitmapy i tak weryfikuj, bo z tagów nie koniecznie musi się zgadzać z faktycznym rozmiarem.

Nie jestem specjalistą, ale jak chcesz to spróbuję pomóc. Napisz na pw o co chodzi, albo tutaj jeżeli to nie tajemnica.
a się na JSie nie znam, bo bym tego pewnie nawet nie tykał w C# jakbym się znał. Ale tak czuję, że jak coś ma magiczne furtki to raczej JS. W jaki sposób miałoby to działać?


@Khaine: nie wiem jak w C# bo go nie znam, ale zakładam, że same zasady są takie same, zresztą widzę że jest wrapper na C#. Generalnie działa to tak, że odpalasz przeglądarkę (PhantomJS to WebKit)
@Decay: A jaka tam tajemnica, różowemu czasem były potrzebne zdjęcia do wrzucenia na stronę w asortyment, ze strony producenta czy coś, to stwierdziłem że spróbuję coś urzeźbić, bo to ja potem kopałem łopatką w tym HTMLu pod F12 żeby te linki wyciągać xD

No i wyciągam, ale nie te rozmiary o które mi chodzi - czyli nie te największe, które wchodzą na stronę dopiero po interakcji z użytkownikiem.

Nic ważnego ogólnie,
@Khaine: jeżeli miałbyś pewność, że na każdej stronie po wczytaniu zawartości te linki do obrazków są w kodzie to bez problemu bierzesz pomysł xetrova, tym sposobem wyciągasz kod, wyciągasz wszystkie odnośniki, filtrujesz te od obrazków, a później lecisz po rozmiarach.
webbrowser powinien sobie poradzić z wyciągnięciem zrenderowanego kodu.

A jeżeli obrazki wczytuje dynamicznie, to chyba nie mam pomysłu. Ewentualnie mógłbyś znaleźć jakąś bazę produktów, coś jak ceneo i napisać scraper pod
@Khaine: takie potworki jak nodejs pewnie znasz chociaż z zasady działania ( ͡° ͜ʖ ͡°) To wyobraź sobie, że to coś podobnego, tak jakby emulujesz przeglądarkę i możesz oskryptować zachowanie tego Twojego pseudousera, daje to sporo możliwości w interakcji z asynchronicznymi requestami i innymi wynalazkami nowoczesnego frontu.
@Decay: to co robiłem działało mniej więcej w ten sposób (było kilkanaście dość podobnych layoutów do sparsowania), co nie siedziało w htmlu (tu jest banalnie, byle nie regexpem oczywiście) to dało się jakoś zrobić jsowym odpowiednikiem (nie pamiętam jak, ale tak jak pisałem - jak ja to zrobiłem to nie mogło być trudne ( ͡° ͜ʖ ͡°)) i w efekcie miałem coś z 80% udanych pobrań, włącznie
jeżeli miałbyś pewność, że na każdej stronie po wczytaniu zawartości te linki do obrazków są w kodzie to bez problemu


@Decay: To już działa. Wybebesza wszystko co ma tylko <img i src= z jakimś ludzkim formatem .jpg, .jpeg, .png czy cokolwiek bym chciał - pod warunkiem, że znajduje się w źródłowym HTML (tym wyciągniętym z linku). Problem jest właśnie tam, gdzie ten obrazek ładuje się w pełnej formie dopiero jak klikniesz
@Khaine: ja tam w kodzie widzę obrazki:
https://www.nakrywamy.pl/images/items/18347/gerlach-celestia-68-opakowanie-2_big.png
Jeżeli o te chodzi to one tam są tylko w tagach a. Jak pisałem żeby scrapować linki to chodziło mi o scrapowanie wszystkiego co zaczyna się na http://. W sumie tutaj też może być problem tylko, że z wyciąganiem linków hmm

A czekaj, zapomniałem wyłączyć javascripta, to chwila.
Dobra, bez js też tam linki są w kodzie. Czyli albo scrapujesz wszystkie linki, albo