Параметры для очистки HTML?

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

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

Ответ 1

Мир Ruby, эквивалентный Beautiful Soup, является why_the_lucky_stiff Hpricot.

Ответ 2

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

http://www.codeplex.com/htmlagilitypack

Ответ 3

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

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

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

Ответ 4

Я нашел HTMLSQL как смехотворно простой способ скрининга. Это займет буквально минуты, чтобы получить результаты.

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

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

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

Ответ 5

Для Perl существует WWW:: Механизировать.

Ответ 6

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

templatemaker утилита от Adrian Holovaty (Django) использует очень интересный подход: вы кормите его вариациями одной и той же страницы и "узнаете", где "дыры" для переменных данных. Это не HTML-код, поэтому было бы полезно также очищать любой другой контент из обычного текста. Я использовал его также для PDF файлов и HTML, преобразованных в открытый текст (с pdftotext и lynx, соответственно).

Ответ 11

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

Ответ 12

Я знаю и люблю 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

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

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

Ответ 13

Сбрасывание особенно удобно с помощью Shoes и 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

Ответ 14

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

Ответ 15

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

Ответ 17

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

Это довольно полно. Все, что до этого происходит, - это импорт библиотеки и настройки моего прокси.

Ответ 18

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

Ответ 19

Хотя он был разработан для .NET веб-тестирования, я использовал WatiN для этой цели. Поскольку он основан на DOM, довольно легко захватить HTML, текст или изображения. Недавно я использовал его, чтобы выгрузить список ссылок из 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

Ответ 20

Другим инструментом для .NET является MhtBuilder

Ответ 22

Я использовал LWP и HTML:: TreeBuilder с Perl и нашли их очень полезными.

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

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

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

Ответ 23

В Java вы можете использовать TagSoup.

Ответ 24

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

Наденьте на следующие модули и ginsu любую царапину вокруг.

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

Ответ 26

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

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

Ответ 27

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

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

Ответ 28

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

Ответ 29

У меня также был большой успех, используя Aptana Jaxer + jQuery для анализа страниц. Это не так быстро или "script -like" в природе, но селектор jQuery + реальный JavaScript/DOM - это спасатель на более сложных (или некорректных) страницах.

Ответ 30

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

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

На одной электронной таблице можно иметь до 50 importxml().

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