Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 18, 2011 21:23:03

anufrikanec
От:
Зарегистрирован: 2011-04-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

doza_and
У меня не уходит. Правда ваша строка долго качается всетаки 150 килобайт.
python 2.6
вашим желаниям больше соответствует:
res=re.search(frase1+r"(.+)"+frase2,some,re.S)
print (res.group(1))
Переделал, строку поиска, но все равно ничего не найдено ((



Офлайн

#2 Апрель 18, 2011 21:36:26

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

Вот текст дословно

import urllib, urllib2, re
url = 'http://all.auto.ru/list/?category_id=15&section_id=1&subscribe_id=&filter_id=&submit=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8&mark_id=0&year%5B1%5D=&year%5B2%5D=&color_id=&price_usd%5B1%5D=&price_usd%5B2%5D=&currency_key=RUR&body_key=&run%5B1%5D=&run%5B2%5D=&engine_key=0&engine_volume%5B1%5D=&engine_volume%5B2%5D=&drive_key=&engine_power%5B1%5D=&engine_power%5B2%5D=&transmission_key=0&used_key=&wheel_key=&custom_key=&available_key=&change_key=&owner_pts=&stime=0&country_id=1&has_photo=0&region%5B%5D=89&region_id=89&sort_by=2&city_id=&output_format=1&client_id=0&extras%5B1%5D=0&extras%5B2%5D=0&extras%5B3%5D=0&extras%5B4%5D=0&extras%5B5%5D=0&extras%5B6%5D=0&extras%5B7%5D=&extras%5B8%5D=0&extras%5B9%5D=0&extras%5B10%5D=0&extras%5B11%5D=0&extras%5B12%5D=&extras%5B13%5D=0&extras%5B14%5D=0&extras%5B15%5D=0&extras%5B16%5D=0&extras%5B17%5D=0&extras%5B18%5D=&extras%5B19%5D=&extras%5B20%5D=&extras%5B21%5D=&extras%5B22%5D=&extras%5B23%5D=0&extras%5B24%5D=0&extras%5B25%5D=&extras%5B26%5D=&extras%5B27%5D=0&extras%5B28%5D=0&extras%5B29%5D=&_p=1'
headers = {'User-Agent':'Mozilla/5.0 (compatible; MSIE 6.1; WindowsNT)'}
req = urllib2.Request(url,None, headers)
some = urllib2.urlopen(req).read()
frase1='<td align=left style=width:30%><a href="'
frase2='" class="offer-list">'
res=re.search(frase1+r"(.+)"+frase2,some,re.S)
print (res.group(1))
замечательно выдает какуюто кучу текста



Офлайн

#3 Апрель 19, 2011 01:24:08

anufrikanec
От:
Зарегистрирован: 2011-04-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

Но к сожалению не ту что стоит между frase1 и frase2



Офлайн

#4 Апрель 19, 2011 01:40:16

anufrikanec
От:
Зарегистрирован: 2011-04-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

Эврика )))

Следующий код возвращает искомую строку, но только одну первую из 50 ((

import urllib, urllib2, re
url = 'http://all.auto.ru/list/?category_id=15&section_id=1&subscribe_id=&filter_id=&submit=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8&mark_id=0&year%5B1%5D=&year%5B2%5D=&color_id=&price_usd%5B1%5D=&price_usd%5B2%5D=&currency_key=RUR&body_key=&run%5B1%5D=&run%5B2%5D=&engine_key=0&engine_volume%5B1%5D=&engine_volume%5B2%5D=&drive_key=&engine_power%5B1%5D=&engine_power%5B2%5D=&transmission_key=0&used_key=&wheel_key=&custom_key=&available_key=&change_key=&owner_pts=&stime=0&country_id=1&has_photo=0&region%5B%5D=89&region_id=89&sort_by=2&city_id=&output_format=1&client_id=0&extras%5B1%5D=0&extras%5B2%5D=0&extras%5B3%5D=0&extras%5B4%5D=0&extras%5B5%5D=0&extras%5B6%5D=0&extras%5B7%5D=&extras%5B8%5D=0&extras%5B9%5D=0&extras%5B10%5D=0&extras%5B11%5D=0&extras%5B12%5D=&extras%5B13%5D=0&extras%5B14%5D=0&extras%5B15%5D=0&extras%5B16%5D=0&extras%5B17%5D=0&extras%5B18%5D=&extras%5B19%5D=&extras%5B20%5D=&extras%5B21%5D=&extras%5B22%5D=&extras%5B23%5D=0&extras%5B24%5D=0&extras%5B25%5D=&extras%5B26%5D=&extras%5B27%5D=0&extras%5B28%5D=0&extras%5B29%5D=&_p=1'
headers = {'User-Agent':'Mozilla/5.0 (compatible; MSIE 6.1; WindowsNT)'}
req = urllib2.Request(url,None, headers)
some = urllib2.urlopen(req).read()
frase1='<td align=left style=width:30%><a href="'
frase2='" class="offer-list">'
res=re.search(frase1+r"(.+?)"+frase2,some,re.S)
print (res.group(1))
при попытке использовать вместо re.search = re.findall, выдает следующую ошибку:

Traceback (most recent call last):
File “C:/avtoru/test2.py”, line 9, in <module>
print (res.group(1))
AttributeError: ‘list’ object has no attribute ‘group’



Офлайн

#5 Апрель 19, 2011 05:52:17

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

anufrikanec
при попытке использовать вместо re.search = re.findall, выдает следующую ошибку:

Traceback (most recent call last):
File “C:/avtoru/test2.py”, line 9, in <module>
print (res.group(1))
AttributeError: ‘list’ object has no attribute ‘group’
Это потому что findall возвращает список найденных совпадений, его надо примерно так обрабатывать:
for res in re.findall(frase1+r"(.+?)"+frase2,some,re.S):
print (res.group(1))
PS: вот никогда понять не мог, в чем прикол задавать такие вопросы на форуме, почти день ждать ответа, когда все можно решить за пару минут заглянув в документацию?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Апрель 19, 2011 12:38:21

anufrikanec
От:
Зарегистрирован: 2011-04-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

PooH
anufrikanec
при попытке использовать вместо re.search = re.findall, выдает следующую ошибку:

Traceback (most recent call last):
File “C:/avtoru/test2.py”, line 9, in <module>
print (res.group(1))
AttributeError: ‘list’ object has no attribute ‘group’
Это потому что findall возвращает список найденных совпадений, его надо примерно так обрабатывать:
for res in re.findall(frase1+r"(.+?)"+frase2,some,re.S):
print (res.group(1))
PS: вот никогда понять не мог, в чем прикол задавать такие вопросы на форуме, почти день ждать ответа, когда все можно решить за пару минут заглянув в документацию?
Решить за пару минут, заглянув в документацию - это конечно да, но при наличие опыта, когда его нет и даже не знаешь, что конкретно надо искать в документации и как называется то что ищешь - проблемнее найти искомое за пару минут. Да еще с учетом что книг по питону конечно много, но сведенья и предпологаемые методы решения каких-то задачь могут отличаться координально.

P.S.
Мне вот не понятно при таком жизненном подходе другое - а зачем по вашему тогда вообще форумы? Или даже так: Зачем вы отвечаете на “дурацкие вопросы” (как к примеру мой), если это вызывает у Вас такое недовольство?



Офлайн

#7 Апрель 19, 2011 14:18:14

anufrikanec
От:
Зарегистрирован: 2011-04-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

Подскажите пожалуйста, в чем может быть проблемма:

>>> a='<title>Продажа легковые автомобили подержанные ВАЗ 21061 </title>'
>>> marka1='<title>'
>>> marka2='</title>'
>>> res=re.search(marka1+r“(.+)”+marka2,a,re.S)
>>> print res
<_sre.SRE_Match object at 0x01EF51E0>



Отредактировано (Апрель 19, 2011 14:19:23)

Офлайн

#8 Апрель 21, 2011 23:25:55

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

Что-то типо такого:

import StringIO
import html5lib
import lxml
import lxml.html

def ParserLinks(html_text):
""" Парсер ссылок на странице """

# Создаем объект для парсинга
parser = html5lib.HTMLParser(tree=html5lib.treebuilders.getTreeBuilder("lxml"))
doc_tree = parser.parse(StringIO.StringIO(html_text))
find_lnk = lxml.etree.XPath(".//html:a", namespaces={"html":"http://www.w3.org/1999/xhtml"})

# Распарсиваем
lnk_list = []
for node in find_lnk(doc_tree):
href = node.get("href")
if href == None:
continue
lnk_list.append(href)

return lnk_list



Офлайн

#9 Ноя. 23, 2011 13:31:59

rarepython
От:
Зарегистрирован: 2011-07-14
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

вытаскивание ссылок из HTML

Psixo
Что-то типо такого:
Код:

import StringIO
import html5lib
import lxml
import lxml.html

def ParserLinks(html_text):
“”“ Парсер ссылок на странице ”“”

# Создаем объект для парсинга
parser = html5lib.HTMLParser(tree=html5lib.treebuilders.getTreeBuilder(“lxml”))
doc_tree = parser.parse(StringIO.StringIO(html_text))
find_lnk = lxml.etree.XPath(“.//html:a”, namespaces={“html”:"http://www.w3.org/1999/xhtml"})

# Распарсиваем
lnk_list =
for node in find_lnk(doc_tree):
href = node.get(“href”)
if href == None:
continue
lnk_list.append(href)

return lnk_list
извините,а можете откомментировать строки,для лучшего понимания и усвоения?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version