Найти - Пользователи
Полная версия: парсинг,с чего начать и как к этому подойти?
Начало » Web » парсинг,с чего начать и как к этому подойти?
1 2
rarepython
хочу начать,написать парсер,но не знаю как к этому подойти.
итак,вот есть страница 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, соединить в одну строку(конкатенировать?) и потом уже отдать сформировавшую ссылку на закачку,после в цикле пойти дальше,до следующего файла.
но если я правильно думаю и алгоритм верен,то подскажите ,как считать код страницы и пройти регуляркой,как конкатенировать(теорию знаю),как качать и как запустить цикл?
Enchantner
rarepython
Выбирайте инструмент по задаче. Не надо парсить html регулярками, используйте BeautifulSoup или lxml.
o7412369815963
Enchantner
rarepython
Выбирайте инструмент по задаче. Не надо парсить html регулярками, используйте BeautifulSoup или lxml.
Иногда регулярками гораздо выгоднее, например на той неделе мне нужно было сграбить с каждой страницы по 15 байт, решил попробовать html5lib (+для получения опыта) - каждая страница парсилась около 1 сек, это очень долго, тем более что совокупный объем страниц = 10Гб, т.к. html5lib мне “не помог” (неприемлемое время выполнения с учетом многопоточности), в итоге я все сделал на регулярках - оно в 100 раз быстрее.

Вывод: инструмент зависит от задачи.
o7412369815963
rarepython
я думаю это вам поможет
alexandre
Есть много полезных библиотек на эту тему. Например http://habrahabr.ru/blogs/python/127584/
rarepython
alexandre
Есть много полезных библиотек на эту тему. Например http://habrahabr.ru/blogs/python/127584/
читал эту статью,только не понял где её скачать и где офруководство?
vlad0405
во многих случаях проще регулярками разбирать, чем подключать библиотеки
o7412369815963
Сляпал колесо - 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 последним параметром
Enchantner
o7412369815963
А почему не CSS или XPath? И да, оно не нужно, есть http://pypi.python.org/pypi/pyquery
o7412369815963
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.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB