Вопрос

Я думаю попробовать Красивый суп, пакет Python для очистки HTML.Существуют ли какие-либо другие пакеты для очистки HTML, на которые мне следует обратить внимание?Python не является обязательным требованием, мне действительно интересно услышать и о других языках.

История до сих пор:

Это было полезно?

Решение

Эквивалент Beautiful Soup в мире Ruby — этоWhy_the_lucky_stiff's. Гибрикос.

Другие советы

В мире .NET я рекомендую HTML Agility Pack.Не так просто, как некоторые из вышеперечисленных вариантов (например, HTMLSQL), но очень гибко.Он позволяет манипулировать плохо сформированным HTML, как если бы это был хорошо сформированный XML, поэтому вы можете использовать XPATH или просто перебирать узлы.

http://www.codeplex.com/htmlagilitypack

BeautifulSoup — отличный способ парсинга HTML.На моей предыдущей работе мне приходилось много заниматься очисткой, и мне хотелось бы знать о BeautifulSoup, когда я начинал.Это похоже на DOM с гораздо большим количеством полезных опций и более питоническим.Если вы хотите попробовать Ruby, они портировали BeautifulSoup, назвав его RubyfulSoup, но он уже давно не обновлялся.

Другими полезными инструментами являются HTMLParser или sgmllib.SGMLParser, которые являются частью стандартной библиотеки Python.Они работают, вызывая методы каждый раз, когда вы входите в тег или выходите из него и встречаете текст HTML.Они как Expat, если вы с этим знакомы.Эти библиотеки особенно полезны, если вы собираетесь анализировать очень большие файлы, а создание DOM-дерева будет долгим и дорогостоящим.

Регулярные выражения не очень нужны.BeautifulSoup обрабатывает регулярные выражения, поэтому, если вам нужны их возможности, вы можете использовать их там.Я советую использовать BeautifulSoup, если вам не нужна скорость и меньший объем памяти.Если вы найдете лучший парсер HTML на Python, дайте мне знать.

я нашел HTMLSQL быть смехотворно простым способом снятия экрана.Чтобы получить результаты с его помощью, требуется буквально несколько минут.

Запросы суперинтуитивны - например:

SELECT title from img WHERE $class == 'userpic'

Теперь есть и другие альтернативы, использующие тот же подход.

Питон lxml библиотека действует как привязка Pythonic для библиотек libxml2 и libxslt.Мне особенно нравится поддержка XPath и красивая печать структуры XML в памяти.Он также поддерживает анализ сломанного HTML.И я не думаю, что вы сможете найти другие библиотеки/привязки Python, которые анализируют XML быстрее, чем lxml.

Для Perl есть WWW::Mechanize.

Помимо Beatiful Soup, Python имеет несколько вариантов очистки HTML.Вот некоторые другие:

  • механизировать:похоже на перл WWW:Mechanize.Предоставляет вам объект, подобный браузеру, для взаимодействия с веб-страницами.
  • lxml:Привязка Python к libwww.Поддерживает различные варианты перемещения и выбора элементов (например, XPath и выбор CSS)
  • царапина:библиотека высокого уровня, использующая шаблоны для извлечения информации из HTML.
  • Пикери:позволяет выполнять запросы к XML-документам, подобные jQuery.
  • царапающий:высокоуровневая платформа для парсинга и сканирования веб-страниц.Его можно использовать для написания пауков, для интеллектуального анализа данных, а также для мониторинга и автоматического тестирования.

«Простой HTML DOM Parser» — хороший вариант для PHP. Если вы знакомы с селекторами jQuery или JavaScript, вы окажетесь как дома.

Найдите это здесь

Здесь также есть сообщение в блоге об этом.

Почему никто еще не упомянул JSOUP для Java? http://jsoup.org/

А шаблонизатор утилита от Адриана Головатого (из Джанго известность) использует очень интересный подход:Вы передаете ему варианты одной и той же страницы, и он «узнает», где находятся «дыры» для переменных данных.Он не специфичен для HTML, поэтому его можно использовать и для очистки любого другого открытого текстового содержимого.Я также использовал его для PDF-файлов и HTML, преобразованных в обычный текст (с помощью pdftotext и lynx соответственно).

Сначала я хотел бы выяснить, предоставляют ли рассматриваемые сайты сервер API или RSS-каналы для доступа к необходимым вам данным.

Я знаю и люблю Скребок для экрана.

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

Три версии скребка экрана:

* 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.

Другим вариантом для Perl было бы Веб::Скрапер который основан на Ruby Скрапи.Короче говоря, благодаря красивому и лаконичному синтаксису вы можете получить надежный парсер непосредственно в структурах данных.

Очистка переполнения стека особенно проста с помощью Обувь и Гибрикос.

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

Я добился определенного успеха с ХтмлЮнит, на Яве.Это простая среда для написания модульных тестов веб-интерфейсов, но она не менее полезна для очистки HTML.

Еще один инструмент для .NET — MhtBuilder

Есть и такое решение: Нетти HttpClient

Я использую 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 

Это почти завершено.Все, что предшествует этому, — это импорт библиотеки и настройки моего прокси.

Я много использовал Beautiful Soup с Python.Это намного лучше, чем проверка регулярных выражений, поскольку работает так же, как использование ДОМ, даже если HTML плохо отформатирован.Вы можете быстро найти HTML-теги и текст с более простым синтаксисом, чем регулярные выражения.Найдя элемент, вы можете перебирать его и его дочерние элементы, что более полезно для понимания содержимого кода, чем регулярных выражений.Я бы хотел, чтобы Beautiful Soup существовал много лет назад, когда мне приходилось много очищать экраны — это сэкономило бы мне много времени и головной боли, поскольку структура HTML была настолько плохой, прежде чем люди начали ее проверять.

Хотя он был разработан для .СЕТЬ веб-тестирование, я использовал ВатиН рамки для этой цели.Поскольку он основан на DOM, захватывать HTML, текст или изображения довольно легко.Недавно я использовал его, чтобы сбросить список ссылок с МедиаВики Запрос пространства имен всех страниц в электронную таблицу Excel.Следующее ВБ.НЕТ фрагмент кода довольно груб, но работает.


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

Реализация Алгоритм анализа HTML5: html5lib (Питон, Руби), HTML-парсер Validator.nu (Ява, JavaScript;C++ в разработке), Хаббаб (С), Твинцам (С#;предстоящие).

Вы были бы дураком, если бы не использовали Perl..Вот и пламя..

Склейте следующие модули и очистите все вокруг.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper

я использовал ЛВП и HTML::Деревостроитель с Perl и нашли их очень полезными.

LWP (сокращение от libwww-perl) позволяет подключаться к веб-сайтам и очищать HTML-код. вы можете получить модуль здесь и книга О'Рейли кажется, здесь онлайн.

TreeBuilder позволяет построить дерево из HTML и документация и исходники доступны в HTML::TreeBuilder — анализатор, создающий синтаксическое дерево HTML..

Однако с таким подходом может потребоваться еще слишком много тяжелой работы.Я не смотрел на Модуль механизации предложено другим ответом, так что я вполне могу это сделать.

В Java вы можете использовать ТегСуп.

Что ж, если вы хотите, чтобы это было сделано на стороне клиента, используя только браузер, у вас есть jcrawl.com.После разработки службы утилизации из веб-приложения (http://www.jcrawl.com/app.html), вам нужно всего лишь добавить сгенерированный скрипт на HTML-страницу, чтобы начать использовать/представлять ваши данные.

Вся логика удаления происходит в браузере с помощью JavaScript.Надеюсь, вы найдете это полезным.Щелкните эту ссылку, чтобы просмотреть живой пример, извлекающий последние новости от Yahoo о теннисе.

Вероятно, у вас уже есть столько же, но я думаю, что вы пытаетесь это сделать:

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")

У меня были смешанные результаты в .NET при использовании SgmlReader, который изначально был запущен Крис Ловетт и, похоже, был обновлен MindTouch.

Мне нравится функция ImportXML(URL, XPath) в таблицах Google.

Он будет повторять ячейки в столбце, если ваше выражение XPath возвращает более одного значения.

Вы можете иметь до 50 importxml() функции в одной электронной таблице.

Веб-плагин RapidMiner также довольно прост в использовании.Он может публиковать сообщения, принимает файлы cookie и может устанавливать пользовательский агент.

Я также добился большого успеха, используя Jaxer + jQuery от Aptana для анализа страниц.По своей природе это не так быстро и не похоже на сценарий, но селекторы jQuery + настоящий JavaScript/DOM спасают жизнь на более сложных (или неправильно сформированных) страницах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top