Wstp do Informatyki Wykad 14 Web scraping Motywacja
Wstęp do Informatyki - Wykład 14 Web scraping
Motywacja działań W wielu przypadkach chcielibyśmy mieć program, który automatycznie pobiera z Internetu różne treści, np. : - informacje kontaktowe dane hoteli tekst (do analiz lingwistycznych) oceny produktów (do analiz marketingowych). . .
Python - pobranie treści strony test. py import urllib 2 response = urllib 2. urlopen("http: //wwsse. pl") page_source = response. read() print page_source
Python - pobranie treści strony Tak pobrana strona jest przechowywana w zmiennej stringowej page_source w formie HTML. Co możemy dalej zrobić z tym tekstem? Możemy go przeszukać!
Python - co wypisze ten program? test. py import urllib 2, re response = urllib 2. urlopen("http: //wwsse. pl") page_source = response. read() print re. findall(r"https? : //[a-z. ]+", page_source)
Pobieranie danych z wielu podstron Spróbujmy czegoś innego. Wyzwanie - znaleźć jak najwięcej nazw telewizorów dostępnych na rynku. Pomysł - trzeba wykorzystać portal ceneo. pl. Wyszukajmy na nim telewizorów. Sprawdźmy, jaki adres mają poszczególne podstrony:
Pobieranie danych z wielu podstron
Pobieranie danych z wielu podstron Pobierzmy jedną podstronę i zobaczmy, gdzie szukać nazw telewizorów: test. py import urllib 2, re response = urllib 2. urlopen("http: //www. ceneo. pl/; szukaj-telewizor; 0020 -30 -0 -03. htm") page_source = response. read() print page_source
Pobieranie danych z wielu podstron wyjście. . . data-source-tag="">LG 43 LH 500 T</a> </strong>. . .
Pobieranie danych z wielu podstron Widzimy, że nazwa telewizora występuje zawsze po data-source-tag="">, a przed </a> Stwórzmy odpowiednie wyrażenie regularne:
Pobieranie danych z wielu podstron test. py import urllib 2, re response = urllib 2. urlopen("http: //www. ceneo. pl/; szukaj-telewizor; 0020 -30 -0 -03. htm") page_source = response. read() print re. findall(r'data-source-tag="">([A-Za-z 0 -9 ]+)</a>', page_source) Funkcja findall zwróci tylko tekst “złapany” w nawiasy, bez kontekstu.
Pobieranie danych z wielu podstron Dokończmy zatem skrypt. Ściągnijmy 5 podstron, wyciągnijmy z nich nazwy telewizorów. Wyciągnięte nazwy będziemy zapisywać na liście telewizory. Na koniec, zamienimy tę listę na zbiór (set), aby pozbyć się możliwych duplikatów.
Pobieranie danych z wielu podstron - wersja końcowa test. py import urllib 2, re telewizory = [] for i in range(5): response = urllib 2. urlopen("http: //www. ceneo. pl/; szukaj-telewizor; 0020 -30 -0 -0 -%d. htm" % i) page_source = response. read() telewizory += re. findall(r'data-source-tag="">([A-Za-z 0 -9 ] +)</a>', page_source) print set(telewizory)
Piękna zupa
Piękna zupa
Beautiful Soup Jest to ciekawy moduł Pythonowy do parsowania HTML-a. Spójrzmy na oficjalny tutorial: https: //www. crummy. com/software/Beautiful. Soup/bs 4/doc/
Budowanie korpusów tekstów Korzystając ze wspomnianych narzędzi możemy zbudować korpusy tekstów na potrzeby badań lingwistycznych. Przykład - Common. Crawl: http: //commoncrawl. org/2016/10/september-2016 -crawl-archive-now-available/
Budowanie korpusów tekstów Szczególnie cennym zasobem lingwistycznym są tzw. korpusy równoległe. Są to zbiory par zdań postaci (zdanie źródłowe, zdanie przetłumaczone). Aby skonstruować korpus równoległy można ręcznie przetłumaczyć tekst…. . ale można też użyć metod NLP.
Budowanie korpusów tekstów Po pierwsze, należy znaleźć teksty wraz z tłumaczeniami. Gdzie ich szukać? ● wielojęzyczne strony internetowe, ● instrukcje obsługi, ● patenty, tłumaczenia dokumentów, . . . W ten sposób uzyskujemy zbiór par dokumentów. Taki zbiór nazywa się często korpusem porównywalnym (comparable corpus).
Budowanie korpusów tekstów Następnym krokiem jest podział tekstów na zdania (segmenty), czyli proces segmentacji. Najlepiej użyć do tego splittera opartego na tzw. regułach SRX (np. https: //github. com/emjotde/eserix) Otrzymujemy wtedy dwa ciągi zdań - w języku źródłowym i docelowym. Ostatnim krokiem jest tzw. urównoleglenie. Najlepsze do tego może okazać się narzędzie hunalign (http: //mokk. bme. hu/en/resources/hunalign/)
Pobieranie wideo z You. Tube Istnieje bardzo ciekawy moduł Pythona, który służy do pobierania filmików z popularnego serwisu You. Tube. Moduł nazywa się Py. Tube.
Pobranie wideo z You. Tube test. py import pytube yt = pytube. You. Tube("https: //www. youtube. com/watch? v=J 1 j_4 Bmsq. UM") video = yt. filter('mp 4')[-1] video. download(r"C: ")
Pobranie wideo z You. Tube Funkcja filter zwraca listę filmików w zadanym formacie. Sztuczka [-1] służy do wybrania ostatniego filmiku, czyli tego w najwyższej jakości.
Dziękuję za uwagę!
- Slides: 24