Uczę się indeksowania sieci za pomocą Pythona. Mam plik CSV z wieloma adresami URL. Używając Pythona 2.7 i selenu Obecnie przeszukuję te witryny w celu wyodrębnienia danych, takich jak: szerokość treści (w pikselach), odpowiedź HTTP, szybkość ładowania strony i meta name="viewport"
etykietka.
Wyniki skryptu eksportuję następnie do pliku CSV, w którym każda kolumna zawiera typ wyodrębnionych danych (patrz poniżej). Planuję wyodrębnić znacznie więcej typów danych, pisząc nowe roboty.
Jak mój obecny skrypt eksportuje dane do pliku CSV -> plik CSV wygląda następująco:
Website | body width | HTTP response | load speed (in secs) | Viewport
www.url1.com | 690 | 200 | 2 | No
www.url2.com | 370 | 404 | 0.5 | Yes
Jednak mój skrypt (jeden singiel.py) staje się coraz dłuższy, a przez to nieco bardziej złożony, z powodu większej liczby linii kodu przy każdej dodanej nowej funkcji. Obawiam się, że im więcej funkcji dodam do niego, tym wolniej i bardziej wrażliwy na błędy będzie on działał. Jak ja to widzę, mam teraz dwie możliwości:
Opcja 1. Kontynuuj zapisywanie nowych funkcji przeszukiwania w istniejącym pliku skryptu
Opcja 2. Zapisywanie nowych funkcji przeszukiwania w różnych plikach skryptów: Od teraz myślę o napisaniu nowegoroboty na osobnych plikach .py (1 robot = 1 plik .py), a także do podzielenia mojego obecnego skryptu (jeden plik .py) na wiele robotów (wiele plików .py).
Mogę wtedy uruchomić każdy robot oddzielnie i pisaćwyniki wszystkich robotów w jednym pliku CSV (jak na powyższej ilustracji). Korzystając z wielu plików przeszukiwaczy (założenie), myślę, że będę miał czystsze, mniej wrażliwe na błędy, szybsze i bardziej elastyczne roboty w porównaniu z posiadaniem wszystkich robotów w jednym pliku .py, tak jak mam teraz.
Moje pytania:
- Jakie są wady i zalety opcji 1 i 2?
- Czy jedna opcja jest lepsza od drugiej, jeśli tak, to dlaczego?
- Czy moje założenie w opcji 2 jest prawidłowe?
Przepraszam, jeśli mój post może nie być wystarczająco szczegółowy, ale uzyskanie odpowiedzi na moje pytania ogromnie mi pomoże!
Odpowiedzi:
1 dla odpowiedzi № 1Czysty kod jest dobry. Chciałbym umieścić typowe funkcje w czymś takim jak plik crawler_library.py
, a następnie niech określone skrypty zaimportują stamtąd funkcje, których potrzebują.
Jeśli chodzi o twoje założenie, tak nie jest aksjomatycznie prawda - kod w różnych skryptach nie różni się funkcjonalnie od kodu w jednym skrypcie. Jednak realistycznie tak jest ogólnie prawdziwe. Utrzymanie i ulepszanie jest łatwiejsze, a dla większości ludzi umieszczanie kodu w funkcjach pozwala im modularyzować to, co próbują zrobić, ułatwia zrozumienie itp.
0 dla odpowiedzi nr 2
jeśli przez „lepszy” masz na myśli bardziej uporządkowany, czystszy kod.Wtedy tak, będzie o wiele porządniej. Jeśli masz inne projekty indeksowania sieci, nie tylko ten, importowanie ich jako modułów jest również świetne, oznacza to, że można ich używać wielokrotnie i odsprzęgnąć. Możliwość bezproblemowego włączania i wyłączania modułów to dobra rzecz.