html - style - tag css




Варианты соскоба HTML? (20)

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

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



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

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

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


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


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

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

В мире Ruby эквивалентом Beautiful Soup является Hpricot Hpricot .


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

Возьмите в руки следующие модули и разбирайте гинсу.

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

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


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


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


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

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

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

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



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


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


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


Хотя он был разработан для веб-тестирования .NET , я использовал для этой цели инфраструктуру WatiN . Поскольку он основан на DOM, захватывать HTML, текст или изображения довольно просто. Недавно я использовал его для выгрузки списка ссылок из запроса пространства имен MediaWiki All Pages в электронную таблицу Excel. Следующий фрагмент кода VB.NET довольно сырой, но он работает.

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

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

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

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

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

Тем не менее, может быть слишком много работы, чтобы сделать что-то подобное этому. Я не смотрел на WWW::Mechanize предложенный другим ответом, так что я вполне могу это сделать.


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

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


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


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





html-content-extraction