Форум сайта python.su
1
[code python]
import urllib.request
import re
stranica = urllib.request.urlopen("http://www.mail.ru/").read()
f = open("Sot.html", "wb")
f.write(stranica)
f.close()
r = r'(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?'
#txt = u"""hi world!you url http://pravda-vsay.ya.ru/#y5__id37 and url http://google.com/"""
txt = open(r'Sot.html',"r").read()
for silki in re.findall(r, txt, re.U):
print(silki)
[/code]
Отредактировано ingfa_1981 (Март 14, 2014 16:48:27)
Офлайн
31
import urllib.request import re stranica = urllib.request.urlopen("http://www.mail.ru/").read() r = r'(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?' for silki in re.findall(r, str(stranica), re.U): print(silki)
Офлайн
1
А какой тип данных возвращает urllib.request.urlopen("http://www.mail.ru/").read(), что их нужно преобразовывать в строки?
Отредактировано ingfa_1981 (Март 14, 2014 17:57:47)
Офлайн
31
print type(stranica)
Офлайн
1
Поэтому у меня и не получилось, потому что там возвращались байты а нужны были строки. Спасибо за помощь
Офлайн
857
ingfa_1981её надо сначала раскодировать
там возвращались байты а нужны были строки
>>> import urllib.request >>> >>> data = urllib.request.urlopen('http://python.su/forum/topic/23714/') >>> html = data.read().decode(data.headers.get_content_charset() or 'latin1') >>> >>> import re >>> re.search(r'там возвращались байты[^.]+', html).group() 'там возвращались байты а нужны были строки' >>>
ingfa_1981r = r'(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?'
Отредактировано py.user.next (Март 14, 2014 22:03:53)
Офлайн
1
А как авторизироваться на странице, или на каждой странице по разному? например на одноклассниках..
Офлайн
857
ingfa_1981везде разные способы, их нужно сначала выяснять, а потом реализовывать
или на каждой странице по разному?
Офлайн
31
from grab import Grab g = Grab() g.setup(post={"fr.posted": "set", "fr.needCaptcha": "", 'fr.login':'*************', 'fr.password':'***************',"button_login": "Войти"}) g.go("http://m.odnoklassniki.ru/dk?bk=GuestMain&st.cmd=main&_prevCmd=main&tkn=8520")
Отредактировано sanodin (Март 16, 2014 12:41:20)
Офлайн
1
а как понять
sanodinкуда этот пост запрос передается, ведь там две ссылки после? Страница авторизации, и список сообщений. Кстати чем их выловить?
g.setup(post={“fr.posted”: “set”, “fr.needCaptcha”: “”, ‘fr.login’:'*************', ‘fr.password’:'***************',“button_login”: “Войти”})
Офлайн