Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » парсинг,с чего начать и как к этому подойти? [RSS Feed]

#1 Сен. 27, 2011 19:24:47

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

парсинг,с чего начать и как к этому подойти?

хочу начать,написать парсер,но не знаю как к этому подойти.
итак,вот есть страница http://www.ex.ua/view/9853995?r=28739,23777 ,в которой хочу сграбить картинки,посмотрев код страницы,нашел нужный код:

<td><span class=small>1.</span><br><a href='/get/16052370' title='003 (1).jpg'>003 (1).jpg</a></td>
где нужная ссылка находится между одинарной кавычкой - /get/16052370 и 003 (1).jpg,а имя файла между закрывающим знаком > и </a>,то есть насколько я правильно понял,мне надо вначале пройти по всему коду страницы,потом с помощью регулярного выражения найти /get/16052370 и 003 (1).jpg, соединить в одну строку(конкатенировать?) и потом уже отдать сформировавшую ссылку на закачку,после в цикле пойти дальше,до следующего файла.
но если я правильно думаю и алгоритм верен,то подскажите ,как считать код страницы и пройти регуляркой,как конкатенировать(теорию знаю),как качать и как запустить цикл?



Отредактировано (Сен. 27, 2011 19:54:14)

Офлайн

#2 Сен. 27, 2011 20:41:09

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

rarepython
Выбирайте инструмент по задаче. Не надо парсить html регулярками, используйте BeautifulSoup или lxml.



Офлайн

#3 Сен. 27, 2011 20:55:02

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

Enchantner
rarepython
Выбирайте инструмент по задаче. Не надо парсить html регулярками, используйте BeautifulSoup или lxml.
Иногда регулярками гораздо выгоднее, например на той неделе мне нужно было сграбить с каждой страницы по 15 байт, решил попробовать html5lib (+для получения опыта) - каждая страница парсилась около 1 сек, это очень долго, тем более что совокупный объем страниц = 10Гб, т.к. html5lib мне “не помог” (неприемлемое время выполнения с учетом многопоточности), в итоге я все сделал на регулярках - оно в 100 раз быстрее.

Вывод: инструмент зависит от задачи.

Офлайн

#4 Сен. 27, 2011 20:58:56

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

Офлайн

#5 Сен. 29, 2011 13:12:23

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

Есть много полезных библиотек на эту тему. Например http://habrahabr.ru/blogs/python/127584/



Отредактировано (Сен. 29, 2011 13:14:30)

Офлайн

#6 Сен. 29, 2011 15:55:49

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

парсинг,с чего начать и как к этому подойти?

alexandre
Есть много полезных библиотек на эту тему. Например http://habrahabr.ru/blogs/python/127584/
читал эту статью,только не понял где её скачать и где офруководство?



Офлайн

#7 Окт. 17, 2011 14:12:16

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

парсинг,с чего начать и как к этому подойти?

во многих случаях проще регулярками разбирать, чем подключать библиотеки



Офлайн

#8 Окт. 17, 2011 20:47:33

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

Сляпал колесо - htmlcut
Работает с ограничениями, но большинство задач покрывает.
+ Работает быстрее большинства распарсивающих библиотек. т.к. основан на regex и выкусывает только нужные куски.
+ Не нужно указывать все вложенные теги, т.е. “<div> <span> <h1> <a> … ”, что-б найти “a” в “div” можно написать“div|a”
+ Маленький и простой (сама ф-ия около 50-и строк кода), кто захочет может допилить под себя.

например url из первого поста достается так:

from htmlcut import xget

html = "... <td><span class=small>1.</span><br><a href='/get/16052370' title='003 (1).jpg'>003 (1).jpg</a></td> ..."
print xget(html, 'td|a~href')
Работает так:
xget(html, ‘div@id=“some”|span@class=“text”|div’)
1) выкусывает первый div с атрибутом id=“some”
2) из полученного куска выкусывает первый span с атрибутом class=“text”
3) из полученного куска выкусывает dv и возвращает его содержимое
Если вместо html содержимого нужно значение атрибута, нужно написать ~attr_name
Если нужно несколько результатов, то указать True последним параметром

Офлайн

#9 Окт. 20, 2011 10:12:30

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

o7412369815963
А почему не CSS или XPath? И да, оно не нужно, есть http://pypi.python.org/pypi/pyquery



Офлайн

#10 Окт. 20, 2011 10:56:59

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

парсинг,с чего начать и как к этому подойти?

Enchantner
o7412369815963
А почему не CSS или XPath? И да, оно не нужно, есть http://pypi.python.org/pypi/pyquery
pyquery работает через lxml, т.е. имеет те же тормоза.

и у меня сейчас подвернулся “сложный” документ - без атрибутов, с “плавующими” блоками, думаю что xpath с таким не справиться.
...
<div>...</div>
<div>
<div>
<h1>Section</h1>
</div>
<div>Target text</div>
</div>
<div>...</div>
...
т.е. тут нужно найти тег с контентом “<h1>Section</h1>”, после этого взять первый div. я тут просто отрезаю документ по этому теги и беру первый div.

Офлайн

  • Начало
  • » Web
  • » парсинг,с чего начать и как к этому подойти?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version