zdawalem jakis czas temu zdalny tescik na zachod UE.
oblalem i nie zaprosili mnie nigdzie, ale poraza mnie brak odpowiedzi i zerwanie kontaktu.
takie oto pytanie dostalem (tlumacze z ang na pl, coby przypadkiem nie zdradzic sie w google):
-> napisz skrypt w Pythonie, ktory:
a promptuje uzytkownika o adres url jakiejs strony
b) nastepnie produkuje report i drukuje go np na konsole:
- str tytulowa i wszelkie metatagi jakie moga byc obecne w kodzie strony
- rozmiar strony url w rozmiarze np KB (czyli ma sie wyswietlic np size; 53K)
c) zanalizuj wczytana str i zwroc:
- policzone slowa
- liczbe unikalnych slow
- najczestszych 5 slow
d) wyswietl rowniez liste meta keywordow, ktore nie pojawiaja sie w zawartosci kodu strony
e) wyswietl liste linkow ktore sie pojawiaja na stronie, wlaczajac w to: link text i cel (target) href
nie jest to wymog, ale mozesz uzyc Beautiful Soup do powyzszych taskow.
czas na rozwiazanie zadania: ok 1.5h
ponizej kod.
a teraz prosze wszystkich ekspertow i architektow, co zrobilem zle ? czy moze musialem to pieknie napisac na klasach, dekoratorach i innych g..nach demonstrujac tym samym swoje ekspertyze pajtonowska ? ale przeciez nie bylo o tym wspomniane nic !!! kazdy chwyt dozwolony !!!
def programming_task(s):
import requests
from bs4 import BeautifulSoup
from collections import Counter
if 'http://' not in s[:8]:
s = 'http://' + s
try:
resp = requests.get(s)
except:
print 'Unable to open the above URL.'
return None
soup = BeautifulSoup(resp.text, 'lxml')
print 'Tytul strony:', soup.title.string
all_tags = [str(tag.name) for tag in soup.find_all()]
metatags = soup.find_all('meta')
if not metatags:
print '\nStrona nie zawiera zadnych meta tags.'
else:
all_meta_name_tags = []
for i in metatags:
if 'name' in i.attrs:
all_meta_name_tags.append(i.attrs)
print '\nMeta tagnames found:'
for tag in all_meta_name_tags:
print tag['name']
print '\nRozmiar strony: ', str(len(resp.text) / 1024) + 'KB'
# Analiza zawartosci:
# liczenie slow
contents_found = []
for attr in ('title', 'content'):
for i in set(all_tags):
for j in soup.find_all(i):
try:
contents_found.append(j[attr])
except:
continue
contents1 = []
for i in contents_found:
contents1.extend(i.split())
print 'Zliczone slowat:\n'
print Counter(contents1)
# Liczba unikalnych slow
print 'Liczba unikalnych slow:', len(set(contents1))
# Najczestsze 5 slow
print 'Most common 5 words\n'
for i in Counter(contents1).most_common(5):
print i[0], ' - found', i[1], 'razy'
# Lista meta keywordow, ktore nie wystepuja na stronie (tresci):
tmp = [i.attrs.keys() for i in metatags]
all_meta_keywords = []
for i in tmp:
for j in i:
if j not in all_meta_keywords:
all_meta_keywords.append(j)
# Lista linkow ze strony, wlaczajac w to sam link oraz jego target href
urls = []
for h in soup.find_all('a'):
if 'title' in h.attrs and 'href' in h.attrs:
urls.append((h.attrs['title'], h.attrs['href']))
print '\nLista linkow:'
for h in urls:
print h[0]
print h[1]
print '\n'
if __name__ == '__main__':
# start of the main program
print 'Prosze wpisac adres URL strony:'
s = raw_input()
programming_task(s)
Tylko blagam - nie piszcie takich tesktow, ze skoro aplikuje, to "powiniennem sam wiedziec" a jak nie to "niech zyje i aplikuje dalej w swojej nieswiadomosci".