Сведения о вопросе

NOTtoday

16:03, 1st July, 2020

Варианты для HTML выскабливания?

Просмотров: 633   Ответов: 25

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

История так далеко зашла:



  Сведения об ответе

park

18:03, 1st July, 2020

В мире Ruby эквивалентом прекрасного супа является why_the_lucky_stiff'S Hpricot .


  Сведения об ответе

screen

18:03, 1st July, 2020

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

http://www.codeplex.com/htmlagilitypack


  Сведения об ответе

piter

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

ITSME

18:03, 1st July, 2020

Я обнаружил, что HTMLSQL -это смехотворно простой способ создания экранов. Это занимает буквально несколько минут, чтобы получить результаты с ним.

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

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

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


  Сведения об ответе

screen

18:03, 1st July, 2020

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


  Сведения об ответе

PIRLO

18:03, 1st July, 2020

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


  Сведения об ответе

прога

18:03, 1st July, 2020

Python имеет несколько вариантов для HTML выскабливания в дополнение к прекрасному супу. Вот некоторые другие:

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


  Сведения об ответе

прога

18:03, 1st July, 2020

"Простой парсер HTML DOM" - это хороший вариант для PHP, если вы знакомы с jQuery или JavaScript селекторами, то вы окажетесь дома.

Найти здесь

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


  Сведения об ответе

lourence

18:03, 1st July, 2020

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


  Сведения об ответе

lats

18:03, 1st July, 2020

Утилита templatemaker от Adrian Holovaty (of Django fame) использует очень интересный подход: вы скармливаете ей вариации одной и той же страницы, а она "learns", где "holes" для переменных данных. Он не является HTML конкретным, так что это было бы хорошо для очистки любого другого открытого текстового контента, а также. Я использовал его также для PDFs и HTML, преобразованных в обычный текст (с pdftotext и lynx соответственно).


  Сведения об ответе

piter

18:03, 1st July, 2020

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

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.


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

Я бы сначала выяснил, предоставляет ли данный сайт(ы) сервер API или каналы RSS для доступа к необходимым вам данным.


  Сведения об ответе

FAriza

18:03, 1st July, 2020

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


  Сведения об ответе

KOMP

18:03, 1st July, 2020

Выскабливание переполнения стека особенно легко с помощью обуви и 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


  Сведения об ответе

ASER

18:03, 1st July, 2020

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


  Сведения об ответе

ASER

18:03, 1st July, 2020

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


  Сведения об ответе

PROGA

18:03, 1st July, 2020

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


  Сведения об ответе

dump

18:03, 1st July, 2020

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


  Сведения об ответе

$DOLLAR

18:03, 1st July, 2020

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

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


  Сведения об ответе

PIRLO

18:03, 1st July, 2020

Хотя он был разработан для веб-тестирования .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


  Сведения об ответе

SILA

18:03, 1st July, 2020

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


  Сведения об ответе

baggs

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

Вы были бы глупцом, если бы не использовали Perl.. А вот и пламя..

Кость поднимите на следующих модулях и Гинсу любую соскребите.

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


  Сведения об ответе

SEEYOU

18:03, 1st July, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться