Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2014 16:48:06

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  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)

Офлайн

#2 Март 14, 2014 16:56:39

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

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)

Офлайн

#3 Март 14, 2014 17:57:16

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

А какой тип данных возвращает urllib.request.urlopen("http://www.mail.ru/").read(), что их нужно преобразовывать в строки?

Отредактировано ingfa_1981 (Март 14, 2014 17:57:47)

Офлайн

#4 Март 14, 2014 18:04:19

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

print type(stranica)

Офлайн

#5 Март 14, 2014 18:13:41

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

Поэтому у меня и не получилось, потому что там возвращались байты а нужны были строки. Спасибо за помощь

Офлайн

#6 Март 14, 2014 22:03:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

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_1981
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})*)?'

это лучше записать в виде многословного регулярного выражения
python.org. re.X



Отредактировано py.user.next (Март 14, 2014 22:03:53)

Офлайн

#7 Март 14, 2014 22:29:09

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

А как авторизироваться на странице, или на каждой странице по разному? например на одноклассниках..

Офлайн

#8 Март 15, 2014 03:30:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

ingfa_1981
или на каждой странице по разному?
везде разные способы, их нужно сначала выяснять, а потом реализовывать



Офлайн

#9 Март 15, 2014 12:14:33

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

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)

Офлайн

#10 Март 15, 2014 23:34:54

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Подскажите, как парсить ссылки не сохраняя страницу в фал?

а как понять

sanodin
g.setup(post={“fr.posted”: “set”, “fr.needCaptcha”: “”, ‘fr.login’:'*************', ‘fr.password’:'***************',“button_login”: “Войти”})
куда этот пост запрос передается, ведь там две ссылки после? Страница авторизации, и список сообщений. Кстати чем их выловить?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version