Otwarty projekt - scraping/indexing/analytics

Otwarty projekt - scraping/indexing/analytics
BD
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:15
1

Czy ktoś zajmował (lub zajmuje) się tematyką scrapingu, wyszukiwarek, itp?
Od jakiegoś czasu chodzi mi po głowie pewien projekt, któremu chętnie poświęciłbym
trochę czasu. Mianowicie chodzi mi o stworzenie wyszukiwarki/indeksera, który miałby nieco odmienne
założenia od popularnych agregatorów/wyszukiwarek.
Po krótce chodzi mi o:

  • odsianie stron marketingowych
  • odsianie stron opartych o javascript
  • odsianie informacji promowanej
  • focus na informacji-wiedzy, przystępnych i otwartych formatach

Ten projekt istnieje w mojej głowie już jakiś czas, zatem miałem kilka podejść
do wstępnego zbadania różnych obszarów tego zagadnienia.
Najbardziej oczywiste sprawy to:
a) pozyskiwanie danych, scraping
b) storage
c) ocena informacji
d) wyszukiwanie informacji

Oczywiście temat scrapingu i wyszukiwarek jest światu znany, natomiast mnie jeszcze nie do końca,
i stąd moje zainteresowanie oraz chęć zgłębienia tych obszarów.

Jeśli chodzi o pozyskiwanie danych to trzeba mieć punkt początkowy, zatem niech nim będzie np. indeks
"top million domains" z alexa, które crawler będzie ignorował. Napisałem kilka crawlerów, zaznajomiłem
się nieco z historią crawlingu i przeczytałem kilka prac naukowych o możliwych architekturach.
Dużo ciekawych spraw - żeby pozyskać dużo danych trzeba sprawnie wykorzystać zasoby obliczeniowe, pamięć,
łącze sieciowe. A więc rozproszona architektura, multithreading/async, kolejki, crawl frontier, dns caching, scheduling, itp.
Trochę podłubałem już w tym temacie i jest bardzo ciekawy. Moje researche były oczywiście sporo ograniczone, więc
mówię tutaj o sprawach typu pythonowe grequests (mało roboty, duże narzut), c++ + curl (dużo roboty, mały narzut).
Oczywiście protokołów jest wiele, sieci i połączenia padają, serwery różnie się zachowują, są wynalazki typu robots.txt, blokady.
Dużo ciekawych spraw i komplikacji, możliwych pułapek, rekursywne strony spamerskie, itd.

W kwestii storage to z tego co obecnie rozumiem - na dużą skalę potrzebne są duże rozwiązania, dedykowane systemy plików,
klastry, macierze. Nie dotarłem do takiej skali, więc mój research tematu był ograniczony do postgresql jako agregatora
agregatora przetworzonych danych i mongodb/redis jako studni bez dna dla danych "surowych", cachowania, throttlingu, itd.
Wiem, że istnieją rzeczy typu Lucene/ElasticSearch i kilka innych, ale moja skala potrzeb była znacznie mniejsza dotychczas.

Ocena informacji to złożony temat. Jeden z tematów, w którym chcę się trochę rozwinąć to machine learning.
Samych metadanych oczywiście jest ogrom - choćby domeny, reflinki, certyfikaty, urle, metadane, nagłówki, formaty, długość treści, kodowanie, sekcje, frameworki, języki, itd. I głębiej jest treść - tutaj dochodzimy do oceny samego kontentu - keywordy, frazy, tematyka, obrazy, i cała reszta.
Do tego dochodzą ciekawostki typu webgraph/pagerank, macierze, modele, machine learning, sieci neuronowe, i wiele fajnych rzeczy, które mam nadzieję
kiedyś zgłębić.

Wyszukiwanie i prezentacja przetworzonej informacji to dla mnie jeszcze niejasny temat. Zakładając popularny model "strona www z jednym inputem", to wydaje
mi się, że kluczową sprawą jest "język jako interfejs wyszukiwarki".

Zmierzając do meritum - szukam ludzi, którzy zajmują się lub byliby zainteresowani takim projektem na początku for fun, a w przyszłości może for fun and profit.
Nie mam zarysu skali przedsięwzięcia, ani też knokretnych wytycznych. Moje projekty trafiają do szuflady, i chcąc to zmienić
próbuję wyjść z inicjatywą.

Co jest potrzebne?

  • chęci, umiejętności i otwarta głowa

Co można zyskać?

  • wiedzę, umiejętności

Obszary, umiejętności, ciekawostki:

  • admin, serwery, jails/containers, sieci, usługi (dns i reszta)
  • architektura i dev
  • protokoły, bazy danych, cache
  • ml, grafy, algorytmy
  • gramatyki, parsery, search,
  • r&d

Przykładowy task: mamy fragment tekstu i chcemy zgadnąć w jakim języku jest napisany.
Moglibyśmy szukać słów kluczowych, rozbijać na leksemy, tworzyć modele statystyczne.
Często skutecznym okazuje się jednak skompresowanie takiego tekstu zip'em i porównanie go ze skompresowanym tekstem deklaracji praw człowieka.

Na początek mam trochę kodu, trochę pomysłów. Mogę też dostarczyć na start infrastrukturę w postaci serwera.
Ogarniam administrację serwera, programowanie, architektury, bazy danych, trochę algorytmów i lubię r&d.
Mój startowy stack obecnie to okolice PostgreSQL, MongoDB, Redis, RabbitMQ, Python, C++, FreeBSD/Linux. Nie skreślam innych technologii,
sam używałem innych i znam kilka innych języków, niemniej mnie osobiście interesuje zdobycie przekrojowego know-how i rozwinięcie umiejętności
w kierunku ML, zatem nie rozważałem tego jako big data, java, hadoop, lucene.

Co z tego może wyjść?
Ciężko odpowiedzieć na to pytanie, ale rzucę kilka luźnych pomysłów:

  • wyszukiwarka
  • indekser wartościowej treści (przykładowo project gutenberg + archive.org + wikipedia, sci-* + cern + nasa + esa)
  • kolejny scrapinghub
  • sprzedaż danych (przykład: jeśli na jakiejś domenie wygasa certyfikat, to taką informacją są zainteresowani konkurenci)
  • analytics
  • google 2.0
  • nic

Możliwych kierunków jest wiele, mnie osobiście interesuje tworzenie czegoś użytecznego.
Szukam osób, które mają trochę wolnego czasu, chęci. Przydałby się też ktoś, do organizacji projektu
(podział pracy, komunikacja). Stawiam jednak na minimalizm, więc proste narzędzia i proste procesy.
W całym przedsięwzięciu zapewne znajdzie się coś ciekawego dla każdego poziomu doświadczenia, więc
kluczowe są chęci.

Jeśli ktoś jest zainteresowany udziałem w czymś takim, proszę o prywatną wiadomość.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Poznań
  • Postów:8764
0

Czemu chcesz odsiewać strony z JS?

I w jaki sposób chcesz to oceniać, czy dana strona się nadaje, czy jest do usunięcia. Praktycznie każda strona ma jakieś, chociażby malutkie, wstawki JS, chociażby statystyki odwiedzeń, czy jakiś onclick.


EV
Może chodzi o SPA
cerrato
@Eviar: nie wiem, może... niech OP się wypowie
Miang
strony z js czy wymagające js aby coś w ogóle było widoczne?
cerrato
@Miang: nie wiem... niech OP się wypowie
BD
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:15
1

Czemu chcę odsiewać js?

Ponieważ www to nie webapps. Informacja jest hipertekstem, czyli markupem. Zatem js to w większości śmieci.
JS nie wzbogaca informacji,

Przykładowo:

  • trackery
  • cdn
  • info o użyciu cookies, które się nie pojawia, bo jest w js
  • blokady dostępu - sztaby ludzi pracują nad tym, piszą kod, testy, mają CI, automatic deployment, ty wchodzisz linksem i widzisz, że cała ich praca jest po prostu zbędna
  • przeciętny artykuł zawiera 2kb tekstu (treść), a strona waży 5mb (prezentacja)

Jak pisałem - mnie interesuje indeksacja treści. Przykładowo: prezentacja odkryć w dziedzinie nauki nie wymaga załącznika w postaci sieci reklamowych.

w jaki sposób chcesz to oceniać, czy dana strona się nadaje, czy jest do usunięcia. Praktycznie każda strona ma jakieś, chociażby malutkie, wstawki JS, chociażby statystyki odwiedzeń, czy jakiś onclick.

onclick to atrybut html, to mi nie przeszkadza.
Nie przeszkadza mi też mini framework do markdown czy też notacji matematycznej, ale facebook sdk, crowd control, nie są częścią informacji.

Jak zatem chcę odsiewać: tld, filename, zawartość skryptu. Kiedy rozbierzesz stronę na części i zmierzysz proporcję tekstu do javascript, to widać to lepiej.
Rozumiem, że są użyteczne skrypty, ale jeśli ich jest wiele na stronie, to najprawdopodobniej treść nie jest najistotniejszą częścią.

Załączam obrazek.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)