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

голоса
378

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

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

Задан 05/08/2008 в 22:09
источник пользователем
На других языках...                            


40 ответов

голоса
54

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

Ответил 05/08/2008 d 22:13
источник пользователем

голоса
39

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

http://www.codeplex.com/htmlagilitypack

Ответил 07/08/2008 d 19:38
источник пользователем

голоса
32

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

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

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

Ответил 07/08/2008 d 19:18
источник пользователем

голоса
18

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

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

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

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

Ответил 07/08/2008 d 19:31
источник пользователем

голоса
16

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

Ответил 17/09/2008 d 13:44
источник пользователем

голоса
15

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

Ответил 06/08/2008 d 00:37
источник пользователем

голоса
11

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

Ответил 10/02/2012 d 20:42
источник пользователем

голоса
11

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

Найти здесь

Существует также блог об этом здесь.

Ответил 31/07/2009 d 20:39
источник пользователем

голоса
10

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

  • механизировать : похоже на PERL WWW:Mechanize. Дает браузер , как объект для ineract с веб - страниц
  • LXML : Python привязки к libwww. Поддерживает различные варианты для обхода и выбора элементов (например , XPath и выбор CSS)
  • scrapemark : библиотека высокого уровня , используя шаблоны для извлечения информации из HTML.
  • pyquery : позволяет сделать JQuery как запросы на XML документов.
  • SCRAPY : высокоинтенсивное выскабливание уровня и веб - ползать рамки. Он может быть использован для записи пауков, для интеллектуального анализа данных и мониторинга и автоматизированного тестирования
Ответил 28/12/2009 d 17:59
источник пользователем

голоса
9

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

Ответил 18/09/2008 d 21:13
источник пользователем

голоса
7

Я знаю и люблю Экран-скребок .

Экран-скребок представляет собой инструмент для извлечения данных из веб-сайтов. Экран-скребок автоматизирует:

* 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.
Ответил 16/08/2009 d 21:56
источник пользователем

голоса
7

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

Ответил 05/08/2008 d 22:11
источник пользователем


голоса
5

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

Ответил 31/08/2008 d 13:09
источник пользователем

голоса
5

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

Ответил 26/08/2008 d 23:46
источник пользователем

голоса
5

Зачистка переполнение стека особенно легко с обувью и 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
Ответил 22/08/2008 d 11:20
источник пользователем

голоса
4

Существует такое решение тоже: Нетти HttpClient

Ответил 11/05/2011 d 19:28
источник пользователем

голоса
4

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

Ответил 13/02/2009 d 13:58
источник пользователем

голоса
4

Хотя он был разработан для .NET веб-тестирования, я использую WatiN рамки для этой цели. Поскольку DOM основе, это довольно легко захватить HTML, текст или изображения. Recentely, я использовал его , чтобы вывести список ссылок из более МедиаВиков запроса пространства имен всех страниц в электронную таблицу 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
Ответил 27/08/2008 d 10:43
источник пользователем

голоса
4

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

Ответил 22/08/2008 d 14:58
источник пользователем

голоса
4

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

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

Ответил 06/08/2008 d 06:57
источник пользователем

голоса
3

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

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

Ответил 29/10/2012 d 16:59
источник пользователем

голоса
3

Реализации алгоритма синтаксического анализа HTML5 : html5lib (Python, Ruby), Validator.nu HTML Parser (Java, JavaScript, C ++ в разработке), Hubbub (C), Twintsam (C #, предстоящих).

Ответил 09/10/2008 d 21:53
источник пользователем

голоса
3

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

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

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Ответил 17/09/2008 d 13:56
источник пользователем

голоса
3

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

Ответил 24/08/2008 d 11:32
источник пользователем

голоса
3

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

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

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

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

Ответил 17/08/2008 d 15:13
источник пользователем

голоса
2

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

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

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

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

Ответил 22/07/2010 d 05:31
источник пользователем

голоса
2

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

Ответил 19/11/2008 d 20:11
источник пользователем

голоса
2

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

Ответил 27/08/2008 d 19:49
источник пользователем

голоса
2

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

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")
Ответил 05/08/2008 d 23:58
источник пользователем

голоса
1

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

Ответил 12/04/2011 d 01:20
источник пользователем

голоса
1

Я использую Feedity - http://feedity.com для некоторых очищающей работы (и преобразования в RSS - каналы) в моей библиотеке. Он хорошо работает для большинства веб - страниц.

Ответил 01/12/2010 d 06:28
источник пользователем

голоса
1

Недавняя беседа Dav стекла Добро пожаловать в джунгли! (YUIConf 2011 Keynote Opening) показывает , как можно использовать YUI 3 на Node.js делать подобные стороне клиента программирования (с DOM селекторов вместо обработки строк) на сервере. Это очень впечатляет.

Ответил 22/11/2010 d 18:04
источник пользователем

голоса
1

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

Ответил 17/05/2010 d 16:58
источник пользователем

голоса
1

Scrubyt использует Ruby , и Hpricot сделать хороший и легкий веб выскабливание. Я написал скребок для библиотечного обслуживания моего университета , используя это в течение примерно 30 минут.

Ответил 25/08/2008 d 13:02
источник пользователем

голоса
1

Регулярные выражения работают очень хорошо для HTML выскабливание, а ;-) Хотя после просмотра Beautiful Soup, я могу понять, почему это было бы ценным инструментом.

Ответил 05/08/2008 d 22:29
источник пользователем

голоса
0

Когда дело доходит до извлечения данных из HTML - документа на стороне сервера, Node.js фантастический вариант. Я использовал его успешно с двумя модулями называют запрос и Cheerio .

Вы можете увидеть пример того, как это работает здесь .

Ответил 10/05/2013 d 19:28
источник пользователем

голоса
0

Я сделал очень хороший библиотеку Интернет Инструменты для веб - соскоб.

Идея заключается в том, чтобы соответствовать шаблон к веб-странице, которая будет извлекать все данные со страницы, а также подтвердить, если структура страницы не изменяется.

Таким образом, вы можете просто взять HTML веб-страницы, которую нужно обработать, удалить все динамические или ненужную содержание и аннотацию интересные детали.

Напр HTML для нового вопроса на странице индекса stackoverflow.com является:

<div id="question-summary-11326954" class="question-summary narrow">

    <!-- skipped, this is getting too long -->

    <div class="summary">

        <h3><a title="Some times my tree list have vertical scroll ,then I scrolled very fast and the tree list shivered .Have any solution for this.
" class="question-hyperlink" href="/questions/11326954/about-scroll-bar-issue-in-tree">About Scroll bar issue in Tree</a></h3>

    <!-- skipped -->

    </div>
</div>

Таким образом, вы просто удалить это определенный идентификатор, название и резюме, чтобы создать шаблон, который будет читать все новые вопросы в названии, резюме, ссылки-массивах:

 <t:loop>
   <div class="question-summary narrow">
     <div class="summary">
       <h3>
          <a class="question-hyperlink">
            {title:=text(), summary:=@title, link:=@href}
          </a>
       </h3>
     </div>
   </div>
 </t:loop>

И, конечно, он также поддерживает основные методы, CSS 3 селекторов, XPath 2 и XQuery 1 выражения.

Единственная проблема заключается в том , что я был настолько глуп , чтобы сделать это Free Pascal библиотека. Но есть также зависит от языка веб - демо .

Ответил 04/07/2012 d 11:43
источник пользователем

голоса
0

Для тех, кто предпочел бы графический инструмент документооборота, RapidMiner (FOSS) имеет хороший веб ползать и выскабливание центра.

Вот серия видео:

http://vancouverdata.blogspot.com/2011/04/rapidminer-web-crawling-rapid-miner-web.html

Ответил 04/04/2011 d 23:44
источник пользователем

голоса
-1

SharpQuery

Это в основном JQuery для C #. Это зависит от HTML Agility обновления для разбора HTML.

Ответил 01/12/2010 d 06:41
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more