Ruby эквивалент в мире Красивому Супу является why_the_lucky_stiff Hpricot.
У Вас, вероятно, уже есть столько же, но я думаю, что это - то, что Вы пытаетесь сделать:
from __future__ import with_statement
import re, os
profile = ""
os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
for line in f:
profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")
BeautifulSoup является отличным способом пойти для очистки HTML. Мое предыдущее задание имело меня делающий большую очистку, и мне жаль, что я не знал о BeautifulSoup, когда я запустил. Это похоже на DOM с намного более полезными опциями и является намного большим количеством pythonic. Если Вы хотите попробовать Ruby, они портировали BeautifulSoup, назвав его RubyfulSoup, но он не был обновлен в некоторое время.
Другие полезные инструменты являются HTMLParser или sgmllib. SGMLParser, которые являются частью стандартной библиотеки Python. Они работают вызывающими методами каждый раз, когда Вы вводите/выходите тег и встречаетесь с текстом HTML. Они похожи на Эмигранта, если Вы знакомы с этим. Эти библиотеки особенно полезны, если бы Вы собираетесь проанализировать очень большие файлы и создаете дерево DOM, было бы длинным и дорогим.
Регулярные выражения не очень необходимы. BeautifulSoup обрабатывает регулярные выражения поэтому при необходимости в их питании, можно использовать его там. Я говорю, идут с BeautifulSoup, если Вам не нужны скорость и меньший объем потребляемой памяти. При нахождении лучшего синтаксического анализатора HTML на Python сообщить мне.
Я нашел HTMLSQL быть смехотворно простым путем к screenscrape. Требуются буквально минуты для получения результатов с ним.
запросы суперинтуитивны - как:
SELECT title from img WHERE $class == 'userpic'
существуют теперь некоторые другие альтернативы, которые проявляют тот же подход.
Я сначала узнал бы, обеспечивает ли рассматриваемый сайт (сайты) сервер API или Каналы RSS для доступа данные, Вы требуете.
Я использую Hpricot на Ruby. Как пример это - отрывок кода, который я использую для получения всех книжных заголовков от шести страниц моей учетной записи HireThings (поскольку они, кажется, не предоставляют единственной странице эту информацию):
pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
pagerange.each do |page|
resp, data = http.get "/perth_dotnet?page=#{page}"
if resp.class == Net::HTTPOK
(Hpricot(data)/"h3 a").each { |a| puts a.innerText }
end
end
end
Это в значительной степени завершено. Все, что прибывает, прежде чем это - импорт библиотеки и настройки для моего прокси.
В мире.NET я рекомендую Пакет Гибкости HTML. Не рядом столь же простой как некоторые вышеупомянутые опции (как HTMLSQL), но это очень гибко. Это позволяет Вам, maniuplate плохо сформировал HTML, как будто это было хорошо сформировано XML, таким образом, можно использовать XPath или просто itereate по узлам.
Регулярные выражения работают вполне прилично на HTML, очищающий также ;-) Хотя после рассмотрения Красивого Супа, я вижу, почему это было бы ценным инструментом.
Другая опция для Perl была бы сеть:: Скребок , который основан на Ruby Scrapi. Короче говоря с хорошим и кратким синтаксисом можно получить устойчивый скребок непосредственно в структуры данных.
Хотя это было разработано для .NET тестирование сети, я использовал платформа WatiN с этой целью. Так как это основано на DOM, довольно легко получить HTML, текст или изображения. Recentely, я использовал его для дампа списка ссылок от MediaWiki Весь запрос пространства имен Страниц в электронную таблицу Excel. Следующий VB.NET код fragement довольно сыр, но он работает.
<час>Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)
Dim PagesLink As Link
For Each PagesLink In PagesIE.TableBodies(2).Links
With MyWorkSheet
.Cells(XLRowCounterInt, 1) = PagesLink.Text
.Cells(XLRowCounterInt, 2) = PagesLink.Url
End With
XLRowCounterInt = XLRowCounterInt + 1
Next
End Sub
Scrubyt использует Ruby и Hpricot, чтобы сделать хорошую и легкую веб-очистку. Я записал скребок для услуг библиотеки своего университета с помощью этого приблизительно в 30 минуты.
Очистка Переполнения стека особенно легка с Обувь и Hpricot.
require 'hpricot'
Shoes.app :title => "Ask Stack Overflow", :width => 370 do
SO_URL = "http://stackoverflow.com"
stack do
stack do
caption "What is your question?"
flow do
@lookup = edit_line "stackoverflow", :width => "-115px"
button "Ask", :width => "90px" do
download SO_URL + "/search?s=" + @lookup.text do |s|
doc = Hpricot(s.response.body)
@rez.clear()
(doc/:a).each do |l|
href = l["href"]
if href.to_s =~ /\/questions\/[0-9]+/ then
@rez.append do
para(link(l.inner_text) { visit(SO_URL + href) })
end
end
end
@rez.show()
end
end
end
end
stack :margin => 25 do
background white, :radius => 20
@rez = stack do
end
end
@rez.hide()
end
end
Я имел некоторый успех с HtmlUnit в Java. Это - простая платформа для записи модульных тестов на веб-UI, но одинаково полезный для очистки HTML.
У меня были смешанные результаты в использовании.NET SgmlReader, который был первоначально запущен Chris Lovett и, кажется, был обновлен MindTouch.
Я использовал LWP и HTML:: TreeBuilder с Perl и нашел их очень полезными.
LWP (короткий для libwww-perl) позволяет Вам соединиться с веб-сайтами и очистить HTML, можно получить модуль здесь , и книга O'Reilly, кажется, онлайн здесь .
TreeBuilder позволяет Вам создавать дерево из HTML, и , документация и источник доступны в HTML:: TreeBuilder - Синтаксический анализатор, который создает синтаксическое дерево HTML .
могло бы быть слишком много тяжелого подъема все еще, чтобы сделать с чем-то вроде этого подход все же. Я не посмотрел эти , Механизируют модуль предложенный другим ответом, таким образом, я могу сделать это.
Я использовал Красивый Суп много с Python. Это намного лучше, чем проверка регулярного выражения, потому что это работает как использование DOM, даже если HTML плохо отформатирован. Можно быстро найти HTML-тэги и текст с более простым синтаксисом, чем регулярные выражения. После того как Вы находите элемент, можно выполнить итерации по нему и его детям, который более полезен для понимания содержания в коде, чем это с регулярными выражениями. Мне жаль, что Красивый Суп не существовал несколько лет назад, когда я должен был сделать много screenscraping - он сохранит меня много времени и головной боли, так как структура HTML была так плоха, прежде чем люди начали проверять его.
Вы были бы дураком для не использования Perl.. Здесь приезжайте провокационные сообщения..
Кость на следующих модулях и ginsu любое царапанье вокруг.
use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Библиотека lxml Python действует как привязка Pythonic для libxml2 и libxslt библиотек. Мне нравятся особенно его поддержка XPath и симпатичная печать структуры XML в оперативной памяти. Это также поддерживает анализирующий поврежденный HTML. И я не думаю, что можно найти другие библиотеки/привязку Python, которые анализируют XML быстрее, чем lxml.
утилита templatemaker от Adrian Holovaty ( известность Django ) использует очень интересный подход: Вы подаете его изменения той же страницы, и это "изучает", где "дыры" для переменных данных. Это не конкретный HTML, таким образом, это было бы хорошо для очистки любого другого содержания простого текста также. Я использовал его также для PDFs и HTML, преобразованного в простой текст (с pdftotext и рысью, соответственно).
Реализации алгоритм парсинга HTML5 : html5lib (Python, Ruby), Синтаксический анализатор HTML Validator.nu (Java, JavaScript; C++ в разработке), Гвалт (C), Twintsam (C#; предстоящий).
Я также имел большой успех с помощью Jaxer Aptana + jQuery для парсинга страниц. Это не так быстро или 'подобно сценарию' по своей природе, но селекторы jQuery +, реальный JavaScript/DOM является спасителем на более сложном (или уродливый) страницы.
'Simple HTML DOM Parser' - хороший вариант для PHP, если вы знакомы с селекторами jQuery или JavaScript, тогда вы почувствуете себя как дома.
Я знаю и люблю Screen-Scraper .
Screen-Scraper - это инструмент для извлечения данных с веб-сайтов. Screen-Scraper автоматизирует:
* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)
Обычное использование:
* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data
Технические:
* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers
Три версии screen-scraper:
* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.
В дополнение к Beatiful Soup, в Python есть несколько опций для HTML-скрейпинга. Вот некоторые другие:
WWW:Mechanize
. Дает браузеру подобный объект для инертной работы с web-страницамиlibww
. Поддерживает различные опции перемещения и выбора элементов (например, XPath и выбор CSS)Мне нравится функция ImportXML(URL, XPath) Google Spreadsheets.
Она будет повторять ячейки в столбце, если выражение XPath возвращает более одного значения.
В одной электронной таблице можно использовать до 50 функций importxml()
.
Веб-плагин RapidMiner также довольно прост в использовании. Он может делать посты, принимает cookies и может устанавливать user-agent.
Для более сложных приложений парсинга я бы порекомендовал парсер IRobotSoft. Это специальная бесплатная программа для очистки экрана. Он имеет мощный язык запросов для HTML-страниц и очень простой интерфейс веб-записи, который избавит вас от многих усилий по программированию.