Dodano nowe podrozdziały do części o projekcie.
Nowe podrozdziały to: - Sprawdzanie typu odpowiedzi - Automatyczna regulacja częstości zapytań Napoczęto crawlowanie wieloprocesowe. Poprawiono diagramy crawler.xml i scrapy_data_flow.xml Nowe pakiety minted i algoruled.
This commit is contained in:
parent
ade4259433
commit
40dd43ee2a
@ -1 +1 @@
|
|||||||
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" version="8.7.4" editor="www.draw.io" type="device"><diagram id="625b897b-bc36-6d92-01ce-cd687e325a73" name="Page-1">7Vldk6MoFP01qdp9SEoFjT52eia7D7tVU9UPu/NIkCg1KC6SMelfvxAxKpie7iTbH1ObhwQuCNdzDly4mYH7Yv+bQFX+J08JmwVeup+BT7Mg8APgqx9tObSWMI5aQyZoajr1hgf6SIzRM9YdTUk96ig5Z5JWYyPmZUmwHNmQELwZd9tyNp61QhlxDA8YMdf6F01l3lrj0OvtvxOa5d3MvmdaNgh/ywTflWa+WQC2x0/bXKBuLNO/zlHKm4EJfJ6Be8G5bEvF/p4wjW0HW/vc+kzryW9BSvmcB4L2ge+I7cyro1SQ+qBsO8HaodCWUuOtPHQIHd+R6FG8GVg1OZXkoUJYtzZKE8qWy4Kpmq+KW8rYPWdcHJ/ViAQYK3stBf9GBi1ptInCSLUYt4iQZH/21fwTYEqIhBdECu24eSCABuNDpy1Tb3pG/Y6HfMBmZGzIiCg7Dd0DqQoGy2lcgYNrVu4MnIzp1XJDPFNE4u0knhGOyWZ7GzyBhedJw6+BJ3TwxAI1jIgPCCR8S2GGDpAOgqRM7/QeqmqYobqmeAwa2VP5t8Z3EZra166lVN4MmnT1q2GinYakzsZrwaZc4TuByWh/kkhkRA6WlgvuALxwArvOJghDkn4fOzEFqJnhC6fKvbObCkgsTlrnzVPDjdceKLEGgtZA7Ss7Aylm0GHQrdId6vMOA88SW+I96Rd8ur8qtB70Yjtx8Cz9RS/SX8lLcgvxqSHXVPt0hRThO5Mi8JJFHC59GJjvMW+htwhA7CWh+YaX6RRasyTjGLC0ZvlPNBy+Mw0vzwejiCmSVxtdynTpl6ZpFohtVLx4zLhAi4r96vb6gEHMD8/sX68RxOIXElA3c1SWPw/49lHsVcFPXgj+4wY1FFPCFlxkPwf+IXhD/Ls78kc5wgE3bi7fMm7aOxdMLgyNgRVmILQGulH4s8MZ8J8OfyeFTPe/Ovz5btLgowkwflcCXF56h7AFGFgDnRHgJZy7CY2Xc34TZoc0Jm9Jo70sg/hCGqG9XvXRfXDmBuBdbCuhfWO99bbi5ngcidU5qnSRFscE7lBdOqBTjNgdo1mpbJJXA+sfaEPYF15TSblu3XApeaE6MN2wOmVtx1lKnbcFq+Nkd3XVJpq1WlFX2dK9PqisjD+fcil1hvpOoxKscVrCBcW83FJ1oBELrGYM1imSSP1ou2JnTepaSZwiNkdVNVcqXPuR7sXlvOCCzAtS7uY5TcncD+JFVWaz688vQbx0FGcSQ4O1AxJ37XS2qw4wz8hB/U/0TYiGy8gm+tVoDp5xTu1oxjvBDiuh2NFb+4/O/P0Foa1JZMieJ30sue6CFY/3On/p4ganQosdgS8Czp8Arr01bflxR+4RjP7Z8a5hXh//R1Oa9HxY7fvG7qZ1TDS3Aykf2rG6O9gPb2UKTDmmYXzFMqm64X3MmJBZqFiBr26J7gouaJrqaSZ5H98Gb8HtcpzDgtDd+qa4vYBaVe3/ymtDYv9/Kfj8Lw==</diagram></mxfile>
|
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36" version="8.7.6" editor="www.draw.io" type="device"><diagram id="625b897b-bc36-6d92-01ce-cd687e325a73" name="Page-1">7Vldj9soFP01kboPiWyDvx4n02b6sLuqNKq6fSSY2KjYuJiMk/n1CzGOP0imSZpO06rzkIELBnzO4V64noD7fPMgUJn9wxPCJp6TbCbg7cTzXBiG6p+2bBtLGAaNIRU0MZ06wyN9JsboGOuaJqQadJScM0nLoRHzoiBYDmxICF4Pu604G85aopRYhkeMmG39RBOZNdbIdzr7e0LTrJ3ZdUzLEuEvqeDrwsw38cBq99c056gdy/SvMpTwumcC7ybgXnAum1K+uSdMY9vC1jy3ONK6X7cghTzlAa954AmxtXl1lAhSbZVtLVgzFFpRalYrty1Cu3ckehRnAuZ1RiV5LBHWrbXShLJlMmeq5qriijJ2zxkXu2c1Ih7Gyl5Jwb+QXksSLAM/UC32e5hXeyJCkk3PZN7rgfCcSKEXblo9aDDettoy9bpj1G15yHpsBsaGjIjS/dAdkKpgsDyMK7Bwffj3o4GTMb1brohngki0OohngCOyXF0HTzDCc6/h18ATWnhigWpGxC8IJPyZwvQtIC0ESZHcaR+qapihqqJ4CBrZUPmfxnfmm9rntqVQq+k16epnw8RR4Cq+FpgM3JFEIiVysJNIMvDYNrg98PwD2LU2QRiS9Gno5w8Bamb4wKla71GnAuIRJ83bmKf6jnc8UDwaCI4GajCwBlLMoG2vW6k7VMcXDJyR2GLnxXXBl/urQrOCTmx7Dk7SX3CW/gpekGuITw25oHpNp0sR3roUgRPPIj90oWd+h7z5zswDkRP75hdeplM4miUexoBwNMsP0bB/YxoOjwejgCmS50tdSnXpTV3XM8SWKjg8p1ygWcn+snv9gkHM9Y/4r9cIYtGZBFT1FBXF7wP++Cj2quDHZ4L/vEQ1xZSwGRfp74G/D34i/u0d+UaPcMCOm+FNxc2x54LxhaHRG4UZCEcDXSn8jcMZcF8Of3uFHO7/3eHPtZMGNy7A6LYFGF56hxgL0BsNdESAl3BuJzTO5/wSZvs0xjdF43hbetGFNMLxftVH996ZG4CbcCv++MZ6bbdi53gsiVUZKnWR5rsEbl9dOnpTjNgdo2mhbJKXPevfaEnYB15RSbluXXIpea46MN0w32dth1lKnbcF891kd1XZJJq1WlFbWdGNPqjMzXreZlLqDPWdRsVb4KSAM4p5saLqQCNmWM3oLRIkkfqn7YqdBakqpXmK2BSV5VSpcOEGuheX05wLMs1JsZ5mNCFT14tmZZEe3SpnpEaj0FKcSQz19g6I7b3T2r7rAHNCDuoP0VchGrbfXTqiX41m74RzakszXgu2nQvFjvb13zrzdxeEpiaRIXsavxhLzrhgRUNf54Y2bvBQaBlH4IuAcw8A19yaVnznkTsEg69r3jZMq913NKVJx4Xlpmtsb1q7RHMzkFpDM1Z7B/vmrUwhJ4c0DK9YJlXXv48ZEzIbFSs+1C3R3sE5TRI9zUHeh7fBa3AbDnNYENqu7xC3F1Crqt2nvCYkdt9Lwbv/AQ==</diagram></mxfile>
|
@ -1 +1 @@
|
|||||||
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" version="8.7.5" editor="www.draw.io" type="device"><diagram id="cf372a5d-54c1-bbd3-8c64-dd4e289d779e" name="Page-1">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</diagram></mxfile>
|
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" version="8.7.5" editor="www.draw.io" type="device"><diagram id="cf372a5d-54c1-bbd3-8c64-dd4e289d779e" name="Page-1">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</diagram></mxfile>
|
BIN
img/crawler.png
BIN
img/crawler.png
Binary file not shown.
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Binary file not shown.
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
@ -68,4 +68,8 @@
|
|||||||
\addcontentsline{toc}{chapter}{Bibliografia}
|
\addcontentsline{toc}{chapter}{Bibliografia}
|
||||||
%\newpage\null\thispagestyle{empty}\newpage
|
%\newpage\null\thispagestyle{empty}\newpage
|
||||||
%\input{zakres_projektu.tex}
|
%\input{zakres_projektu.tex}
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% LaTeX-command: "latex -shell-escape"
|
||||||
|
%%% End:
|
@ -9,6 +9,8 @@
|
|||||||
\usepackage{hyperref} % wewnetrzne odnosniki w dokumencie
|
\usepackage{hyperref} % wewnetrzne odnosniki w dokumencie
|
||||||
|
|
||||||
\usepackage{listings} % kody zrodlowe
|
\usepackage{listings} % kody zrodlowe
|
||||||
|
\usepackage{minted} % lepsze kody zrodlowe
|
||||||
|
\usepackage[algoruled]{algorithm2e} %pseudocody
|
||||||
\usepackage{fancyhdr} % zywe paginy smierci
|
\usepackage{fancyhdr} % zywe paginy smierci
|
||||||
|
|
||||||
\usepackage{tocloft} % format spisu tresci
|
\usepackage{tocloft} % format spisu tresci
|
||||||
@ -25,7 +27,6 @@
|
|||||||
\usepackage{tabularx} %lepsze tabele nie uzywane
|
\usepackage{tabularx} %lepsze tabele nie uzywane
|
||||||
\usepackage{makecell} % do formatowania cell w tabelach
|
\usepackage{makecell} % do formatowania cell w tabelach
|
||||||
\usepackage{geometry}
|
\usepackage{geometry}
|
||||||
% \usepackage{minted} %kolorowanie kodu
|
|
||||||
\usepackage{subfig}
|
\usepackage{subfig}
|
||||||
|
|
||||||
\usepackage{float} % to use H option in figures
|
\usepackage{float} % to use H option in figures
|
||||||
@ -34,4 +35,7 @@
|
|||||||
|
|
||||||
\usepackage{titling}
|
\usepackage{titling}
|
||||||
|
|
||||||
\usepackage{afterpage}
|
\usepackage{afterpage}
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% LaTeX-command: "latex -shell-escape"
|
||||||
|
%%% End:
|
191
rozdzial_3.tex
191
rozdzial_3.tex
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
\chapter{Ekstrakcja godzin rozpoczęcia mszy świętych}
|
\chapter{Ekstrakcja godzin rozpoczęcia mszy świętych}
|
||||||
\section{Ogólny zarys systemu}
|
\section{Ogólny zarys systemu}
|
||||||
System zaczyna działanie od zebrania jak największej ilości danych (nazwa parafii, adres, diecezja
|
System zaczyna działanie od zebrania jak największej ilości danych (nazwa parafii, adres, diecezja
|
||||||
@ -150,69 +149,201 @@ porusza się pająk. Oznacza to, że jedna instancja pająka zajmuje się ści
|
|||||||
tylko jedenej parafii. W ramach jednej parafii pająk jest w stanie
|
tylko jedenej parafii. W ramach jednej parafii pająk jest w stanie
|
||||||
asynchronicznie wysłać wiele zapytań do serwera i odbierać wiele odpowiedzi od serwera.
|
asynchronicznie wysłać wiele zapytań do serwera i odbierać wiele odpowiedzi od serwera.
|
||||||
|
|
||||||
\subsubsection{Komponenty crawler'a}
|
\subsection{Komponenty pająka}
|
||||||
\subsubsection{Przepływ danych}
|
\begin{description}
|
||||||
|
\item [Silnik] - odpowiada za kontrolę przepływu danych i komunikację między komponentami.
|
||||||
|
\item [Dyspozytor] - otrzymuje żądania od silnika, kolejkuje je i na
|
||||||
|
prośbę silnika odsyła z powrotem.
|
||||||
|
\item [Downloader] - jego zadniem jest ściąganie stron parafialnych i
|
||||||
|
przekazywanie ich silnikowi.
|
||||||
|
\item [Przetwarzacz danych] - zajmuje się końcową obróbką i zapisem danych.
|
||||||
|
\item [Spider]\footnote{Użyto angielskiej nazwy, aby rozróżnić
|
||||||
|
\textit{spider'a} (komponent pająka), od pająka (cały program
|
||||||
|
odpowiedzialny za crawlowanie stron parafialnych).}
|
||||||
|
- definuje sposób w jaki ściągać dane, między innymi jak parsować stronę i za jakimi
|
||||||
|
linkami podążać.
|
||||||
|
\item [Spider middleware] - programy pośredniczące między silnkiem, a
|
||||||
|
spider'em. Odpowiedzialne są za dodatkowe przetwarzanie danych wyjściowych
|
||||||
|
(dane parafialne i żądania) i wejściowych (odpowiedzi) spider'a.
|
||||||
|
\item [Downloader middleware] - programy pośredniczące między silnikiem, a
|
||||||
|
downloader'em. Zajmują się dodatkowym przetwarzaniem danych wejściowych
|
||||||
|
(żądań) i wyjściowych (odpowiedzi) downloader'a.
|
||||||
|
|
||||||
|
\end{description}
|
||||||
|
\newpage
|
||||||
|
\subsection{Przepływ danych}
|
||||||
|
|
||||||
Przepływ danych kontrolowany jest przez
|
Przepływ danych kontrolowany jest przez
|
||||||
silnik i prezentuje się następująco:
|
silnik i prezentuje się następująco:
|
||||||
|
|
||||||
\begin{figure}[tbh]
|
\begin{figure}[tbh]
|
||||||
\center
|
\center
|
||||||
\includegraphics[width=0.7\hsize]{scrapy_data_flow.png}
|
\includegraphics[width=0.85\hsize]{scrapy_data_flow.png}
|
||||||
% \caption{100 crawlerów pracujących jednocześnie}
|
% \caption{100 crawlerów pracujących jednocześnie}
|
||||||
\label{scrapy_data_flow_pic}
|
\label{scrapy_data_flow_pic}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Silnik otrzymuje od pająka żądanie pobrania początkowej strony danej
|
\item Silnik otrzymuje od spider'a żądanie pobrania początkowej strony danej
|
||||||
parafii (najczęściej jest to strona główna parafii).
|
parafii (najczęściej jest to strona główna parafii).
|
||||||
\item Silnik oddaje żądania dyspozytorowi, który kolejkuje je do dalszego
|
\item Silnik oddaje żądania dyspozytorowi, który kolejkuje je do dalszego
|
||||||
przetwarzania oraz pyta dyspozytora o żądania gotowe do przekazania downloader'owi.
|
przetwarzania oraz pyta dyspozytora o żądania gotowe do przekazania downloader'owi.
|
||||||
\item Dyspozytor zwraca silnikowi następne żądania.
|
\item Dyspozytor zwraca silnikowi następne żądania.
|
||||||
\item Silnik wysyła żądania do downloader'a. Zanim żądania dotrą do
|
\item Silnik wysyła żądania do downloader'a. Zanim żądania dotrą do
|
||||||
downloader'a przetwarzane są przez middleware'y downloader'a.
|
downloader'a przetwarzane są przez downloader middleware.
|
||||||
\item Downloader ściąga stronę parafialną i umieszcza ją w odpowiedzi, którą
|
\item Downloader ściąga stronę parafialną i umieszcza ją w odpowiedzi, którą
|
||||||
przesyła silnikowi. Zanim odpowiedź dotrze do silnka przetwarzana jest przez
|
przesyła silnikowi. Zanim odpowiedź dotrze do silnka przetwarzana jest przez
|
||||||
middleware'y downloader'a.
|
downloader middleware.
|
||||||
\item Silnik otrzymuje odpowiedź od downloader'a i przekazuje ją pająkowi do
|
\item Silnik otrzymuje odpowiedź od downloader'a i przekazuje ją spider'owi do
|
||||||
dalszego przetwarzania. Zanim odpowiedź trafi do pająka przetwarzana jest
|
dalszego przetwarzania. Zanim odpowiedź trafi do spider'a przetwarzana jest
|
||||||
przez middleware'y pająka.
|
przez spider middleware.
|
||||||
\item Pająk przerabia odpowiedź i zwraca dane strony parafialnej silnikowi. Zanim dane
|
\item Spider przerabia odpowiedź i zwraca dane strony parafialnej silnikowi. Zanim dane
|
||||||
trafią do silnika przechodzą przez middleware'y pająka. Dodatkowo pająk
|
trafią do silnika przechodzą przez spider middleware. Dodatkowo spider
|
||||||
wysła żądania z nowymi stronami parafialnymi do pobrania.
|
wysła żądania z nowymi stronami parafialnymi do pobrania.
|
||||||
\item Silnik wysyła zebrane dane do przetwarzacza danych, który zapisuje je w
|
\item Silnik wysyła zebrane dane do przetwarzacza danych, który zapisuje je w
|
||||||
pliku jsonline. Następnie przekazuje nowe żądania do zakolejkowania
|
pliku jsonline REF. Następnie przekazuje nowe żądania do zakolejkowania
|
||||||
dyspozytorowi.
|
dyspozytorowi.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
\vspace*{-20mm}
|
% \vspace*{-20mm}
|
||||||
Cały proces trwa dopóty, dopóki są nowe żądania do przetworzenia.
|
Cały proces trwa dopóty, dopóki są nowe żądania do przetworzenia.
|
||||||
|
|
||||||
|
\subsection{Sprawdzanie typu odpowiedzi}
|
||||||
|
Podczas crawlowania ważne jest rozpoznawanie typu ściąganych danych. W przypadku
|
||||||
|
crawlowania stron parafialnych interesują nas wyłącznie dane tekstowe. Należy
|
||||||
|
zatem zadbać o to aby nie pobierać danych binarnych takich jak np. video, audio
|
||||||
|
i obrazy.
|
||||||
|
|
||||||
\vspace*{20mm}
|
Scrapy obsługuje rozpoznawanie typu zawartości odpowiedzi bazując na
|
||||||
|
następujących kryteriach:
|
||||||
|
\begin{itemize}
|
||||||
|
\item wartościach \mintinline{bash}{Content-type}, \mintinline{bash}{Content-Encoding} i \mintinline{bash}{Content-Disposition} w nagłówku odpowiedzi,
|
||||||
|
\item nazwie pliku lub adresie url (jeśli nie udało się rozpoznać po nagłówku),
|
||||||
|
\item analizując pierwsze 5000 bajtów zawartości odpowiedzi w poszukiwaniu
|
||||||
|
znaków znajdującyh się wyłącznie w plikach binarnych (jeśli nie udało się
|
||||||
|
rozpoznać po nazwie pliku lub adresie url).
|
||||||
|
\end{itemize}
|
||||||
|
Powyższy schemat postępowania jest skuteczny jeśli serwisy internetowe zwracają
|
||||||
|
poprawne odpowiedzi. Niestety niektóre strony parafialne potrafią zwracać
|
||||||
|
odpowiedzi, które są niezgodne z
|
||||||
|
https://tools.ietf.org/html/rfc7231 section-3.1.1.5.
|
||||||
|
UZU Dla przykładu potrafi zwórcić \mintinline{bash}{Content-Type: text/html}, a w \mintinline{bash}{body} binarną
|
||||||
|
zawartość np. film.
|
||||||
|
Ze względu na tego rodzaju anomalie zastosowano następujący algorytm REF.
|
||||||
|
|
||||||
|
|
||||||
|
\enlargethispage{4\baselineskip}
|
||||||
|
\begin{algorithm}
|
||||||
|
\setstretch{1.2}
|
||||||
|
\SetAlgorithmName{Algorytm}{algorithm}{List of Algorithms}
|
||||||
|
\caption{Rozpoznawanie plików binarnych}
|
||||||
|
\SetAlgoLined
|
||||||
|
\SetKwData{File}{bytes}
|
||||||
|
\SetKwData{True}{True}
|
||||||
|
\SetKwData{False}{False}
|
||||||
|
\SetKwInput{kwInput}{Wejście}
|
||||||
|
\SetKwInput{kwOutput}{Wyjście}
|
||||||
|
\kwInput{\File $\leftarrow$ 1024 pierwsze bajty pliku}
|
||||||
|
\kwOutput{\True jeśli plik binarny, \False jeśli plik tekstowy}
|
||||||
|
|
||||||
|
\SetKwData{ControlCount}{control\_char\_count}
|
||||||
|
\SetKwData{ControlRatio}{control\_char\_ratio}
|
||||||
|
\SetKwData{AsciiCount}{extended\_ascii\_count}
|
||||||
|
\SetKwData{AsciiRatio}{extended\_ascii\_ratio}
|
||||||
|
\If{\File puste}{
|
||||||
|
\Return{\False}\;
|
||||||
|
}
|
||||||
|
\If{\File dekodowalne jako unikod}{
|
||||||
|
\Return{\False}\;
|
||||||
|
}
|
||||||
|
\ControlCount $\leftarrow$ liczba znaków kontrolnych w \File\;
|
||||||
|
\AsciiCount $\leftarrow$ liczba znaków ascii o kodach od 128 do 255 w \File\;
|
||||||
|
\ControlRatio $\leftarrow \frac{\ControlCount}{1024}$\;
|
||||||
|
\AsciiRatio $\leftarrow \frac{\AsciiCount}{1024}$\;
|
||||||
|
|
||||||
|
\SetKwIF{IfM}{ElseIfM}{ElseM}{if~(\endgraf}{\endgraf)~then}{else if}{else}{end if}%
|
||||||
|
\IfM{\begin{tabular}{@{\hspace*{1.5em}}l@{}}
|
||||||
|
$($\ControlRatio $> 0.3$ {\bf and} \AsciiRatio $< 0.05)$ {\bf or}\\
|
||||||
|
$($\ControlRatio $> 0.8$ {\bf and} \AsciiRatio $> 0.80)$
|
||||||
|
\end{tabular}}{
|
||||||
|
\Return{\True}\;
|
||||||
|
}
|
||||||
|
|
||||||
|
\SetKwData{Null}{null}
|
||||||
|
\If{znak \Null w \File}{
|
||||||
|
\Return{\True}\;
|
||||||
|
}
|
||||||
|
\Return{\False}\;
|
||||||
|
\end{algorithm}
|
||||||
|
\subsection{Automatyczna regulacja częstości zapytań}
|
||||||
|
Biblioteka scrapy zawiera przydatne rozszerzenie, które potrafi automatycznie
|
||||||
|
regulować częstość zapytań w zależności od obciążenia crawler'a i strony internetowej.
|
||||||
|
|
||||||
|
\noindent Algorytym regulacji częstości zapytań prezentuje się następująco:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Przyjmijmy, że:
|
||||||
|
|
||||||
|
\subitem {\makebox[4.55cm][l]{\mintinline{python}{download_delay}\footnote{Czasy oczekiwania i
|
||||||
|
opóźnienia liczone są w sekudnach.}}} to opóźnienie wysłania
|
||||||
|
zapytania.
|
||||||
|
\subitem \mintinline{python}{target_download_delay} to docelowe
|
||||||
|
opóźnienie zapytania.
|
||||||
|
\subitem {\makebox[4.55cm][l]{\mintinline{python}{init_download_delay}}} to początkowe opóźnienie wysłania
|
||||||
|
zapytania.
|
||||||
|
\subitem {\makebox[4.55cm][l]{\mintinline{python}{min_download_delay}}} to minimalne opóźnienie wysyłania.
|
||||||
|
\subitem {\makebox[4.55cm][l]{\mintinline{python}{max_download_delay}}} to maksymalne opóźnienie wysyłania.
|
||||||
|
\subitem {\makebox[4.55cm][l]{\mintinline{python}{latency}}} to czas od
|
||||||
|
ustanowienia połączenia \\
|
||||||
|
{\makebox[5.22cm][l]{}} do otrzymania nagłówków odpowiedzi.
|
||||||
|
\subitem {\makebox[4.55cm][l]{\mintinline{python}{target_concurrency}}} to zaplanowana liczba zapytań na sekundę.
|
||||||
|
|
||||||
|
\item Zacznij z \mintinline{python}{download_delay} równym \mintinline{python}{init_download_delay}.
|
||||||
|
\item Kiedy odpowiedź jest odebrana, \\ustaw
|
||||||
|
\mintinline{python}{target_download_delay = latency / target_concurrency}
|
||||||
|
\item Następne \mintinline{python}{download_delay} ustaw jako średnią z
|
||||||
|
aktualnego \mintinline{python}{download_delay} i \mintinline{python}{target_download_delay}.
|
||||||
|
\item \mintinline{python}{download_delay} nie może być mniejszy niż i większy niż .
|
||||||
|
\item Czasy oczekiwania na odpowiedzi z kodem http różnym od 2xx nie są brane
|
||||||
|
pod uwagę.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\noindent W crawlerze stron parafialnych stałe ustawiono następująco:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \mintinline{python}{min_download_delay = 0}
|
||||||
|
\item \mintinline{python}{init_download_delay = 5}
|
||||||
|
\item \mintinline{python}{target_concurrency = 1}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Crawlowanie wieloprocesorowe}
|
||||||
|
Pająk został zaprojektowany w ten sposób, aby bardzo łatwo można było
|
||||||
|
urównoleglić ściąganie stron parafialnych.
|
||||||
Z pomocą GNU parallel crawlowane jest jednocześnie 100 parafii.
|
Z pomocą GNU parallel crawlowane jest jednocześnie 100 parafii.
|
||||||
|
|
||||||
\begin{figure}[tbh]
|
\begin{figure}[tbh]
|
||||||
\center
|
\center
|
||||||
\includegraphics[width=0.7\hsize]{crawler.png}
|
\includegraphics[width=0.7\hsize]{crawler.png}
|
||||||
\caption{100 crawlerów pracujących jednocześnie}
|
\caption{100 crawlerów pracujących jednocześnie.}
|
||||||
\label{crawler_pic}
|
\label{crawler_pic}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Organizacja danych} % może zbyt inżynierskieby
|
\subsection{Konwersja html na tekst.}
|
||||||
\section{Ekstrakcja godzin rozpoczęcia mszy świętych}
|
|
||||||
\subsection{Ogólny zarys}
|
\section{System crowdsourcingowy}
|
||||||
\subsection{Named entity recognition}
|
\section{Ekstraktor regułowy}
|
||||||
\subsection{Słowa kluczowe}
|
\section{Ekstraktor oparty na uczeniu maszynowym}
|
||||||
\subsection{Reguły}
|
|
||||||
\subsection{Bootstraping}
|
|
||||||
\subsection{Otoczenia słów (ang. word embeddings)}
|
|
||||||
|
|
||||||
\chapter{Rezultaty}
|
\chapter{Rezultaty}
|
||||||
\section{Wyrażenia regularne}
|
% \section{Organizacja danych} % może zbyt inżynierskieby
|
||||||
\section{Bootstraping}
|
|
||||||
\section{Autorska metoda}
|
|
||||||
|
|
||||||
\subsection{Ewaluacja wewnętrzna} %F1 score
|
|
||||||
\subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy
|
|
||||||
\chapter{Wnioski}
|
|
||||||
\chapter{Perspektywy na przyszłość}
|
\chapter{Perspektywy na przyszłość}
|
||||||
|
\chapter{Podsumowanie}
|
||||||
|
|
||||||
|
% \subsection{Ewaluacja wewnętrzna} %F1 score
|
||||||
|
% \subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy
|
||||||
|
% \chapter{Wnioski}
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% LaTeX-command: "latex -shell-escape"
|
||||||
|
%%% End:
|
Loading…
Reference in New Issue
Block a user